2016-05-17 50 views
4

我想使用Delphi構建應用程序,您必須閱讀Gmail收件箱,並且必須處理特殊用途的電子郵件。使用Indy 10回收GMail收件箱10

我使用Indy組件POP3構建了這個應用程序,部分代碼如下。

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; 

不行,性反應的「壞命令」

+0

神奇.... POP3.Login工作。謝謝。 –

回答

0

「確定谷歌!」

與印10.6.2.5298和OpenSSL 1.0.2h,德爾福DX10測試(不更新1)

1)此行看起來不是必需的,爲什麼你要設置名稱爲在設計時創建的組件?

Name := 'POP3'; 

2)儘量使登錄後連接

POP3.Connect; 
POP3.Login; 

3)如果你得到錯誤,如EIdReplyPOP3Error with message 'Web login required: https://support.google.com/mail/answer/78754,或許你必須使用application specific password或打開Gmail中Allow less secure apps設置

enter image description here

+0

太棒了... POP3.Login有效。謝謝 –

+1

@MiguelMolina:'TIdPOP3.AutoLogin'默認爲True。當爲True時,'TIdPOP3.Connect()'爲你自動調用TIdPOP3.Login()。由於您將'TIdPOP3.AutoLogin'設置爲False,因此您必須手動調用'TIdPOP3.Login()'。 –