2016-05-17 1 views
4

Je suis en train de construire une application avec Delphi, vous devez lire la boîte de réception Gmail, et doit traiter les e-mails à des fins spéciales.Récupérer boîte de réception GMail avec Indy 10

J'ai construit cette application en utilisant les composants Indy POP3, une partie du code est ci-dessous.

procedure TfrmMain.LeerCorreos; 
var 
    mensaje: TIdMessage; 
    i: Integer; 
begin 
    try 
    with POP3 do 
    begin 
     Name := 'POP3'; 
     AutoLogin := False; 
     Host := 'pop.gmail.com'; 
     Username := '*******@gmail.com'; 
     Password := '*****'; 
     Port := 995; 
     IOHandler := IdSSLIOHandlerSocketOpenSSL; 
     UseTLS := utUseImplicitTLS; 
    end; 
    with IdSSLIOHandlerSocketOpenSSL do 
    begin 
     Destination := 'pop.gmail.com:995'; 
     Host := 'pop.gmail.com'; 
     Port := 995; 
     DefaultPort := 0; 
    end; 
    POP3.Connect; 
    try 
     Mensajes.Clear; 
     mensaje := TIdMessage.Create(nil); 
     try 
     for i := 1 to POP3.CheckMessages do 
     begin 
      mensaje.Clear; 
      POP3.RetrieveHeader(i, mensaje); 
      Mensajes.Items.Add; 
      Mensajes.Items[i - 1].SubItems.Add(mensaje.From.Address); 
      Mensajes.Items[i - 1].SubItems.Add(mensaje.Subject); 
      Mensajes.Items[i - 1].SubItems.Add(DateToStr(mensaje.Date)); 
     end; 
     finally 
     FreeAndNil(mensaje); 
     end; 
    finally 
     POP3.Disconnect; 
    end; 
    except 
    on e : Exception do 
     ShowMessage('error=' + e.Message); 
    end; 
end; 

Non travail, responce « mauvaise commande »

+0

fantastique .... POP3.Login travail. Merci. –

Répondre

0

"Ok google!"

Testé avec Indy 10.6.2.5298 et 1.0.2h OpenSSL, Delphi DX10 (pas mettre à jour 1)

1) Cette ligne n'a pas l'air nécessaire.Pourquoi allez-vous définir le nom du composant qui a été créé au moment du design?

Name := 'POP3'; 

2) Essayez de faire connexion après la connexion

POP3.Connect; 
POP3.Login; 

3) Si vous obtenez une erreur comme EIdReplyPOP3Error with message 'Web login required: https://support.google.com/mail/answer/78754, peut-être vous devez utiliser application specific password ou activer Allow less secure apps dans les paramètres de Gmail

enter image description here

+0

Fantastique ... POP3.Login fonctionne. Merci –

+1

@MiguelMolina: 'TIdPOP3.AutoLogin' est True par défaut. Lorsque True, 'TIdPOP3.Connect()' appelle 'TIdPOP3.Login()' automatiquement pour vous. Puisque vous définissez 'TIdPOP3.AutoLogin' sur False, vous devez appeler' TIdPOP3.Login() 'manuellement. –