2011-12-13 276 views
3

我正在嘗試與delphi建立一個應用程序,它必須每隔30秒檢查一次gmail收件箱,並且必須處理特殊用途的電子郵件。Indy POP3定期接收電子郵件

使用Indy POP3組件構建該應用程序,部分代碼如下。

If Not POP3.Connected Then 
    Begin 

    POP3.Host := 'pop.gmail.com'; 
    POP3.Port := 995; 
    POP3.Username := 'email'; 
    POP3.Password := 'password'; 


    SSL.Host := POP3.Host; 
    SSL.Port := POP3.Port; 
    SSL.Destination := SSL.Host + ':' + IntToStr(SSL.Port); 
    POP3.IOHandler := SSL; 
    POP3.UseTLS := utUseImplicitTLS; 

    // try etc... 
    POP3.Connect; 
    End;  
    MsgCnt := POP3.CheckMessages; 

     For i := 1 To MsgCnt Do 
     Begin 

      POP3.Retrieve(i, Msg); 
      // process message.. etc.. 

     End; 

我有一個問題,我將嘗試在下面解釋;

  • 如果我斷開和連接POP3每隔30秒,一些嘗試後 服務器拒絕我的連接,我得到了「套接字錯誤」。如果我不嘗試 每30秒連接一次,只需每30秒檢索一次電子郵件,我就不會收到新電子郵件。
  • 而且,如果我沒有斷開連接或使用「DisconnectNotifyPeer」命令,我會一次又一次收到讀取的電子郵件,但如果我能解決上述問題,我會處理此問題,但有關此問題的其他建議也會對我有所幫助。

你覺得呢?我能做些什麼來解決這個問題,而不是每30秒連接一次,但接收新的電子郵件?有沒有像ADO Requery方法或其他方法的命令或函數?

順便說一句,我已經嘗試了一些其他的godaddy郵件帳戶,它也拒絕我的連接3或4次後,我想用gmail(谷歌應用程序)解決這個問題。

謝謝你的幫助。

+3

每30秒連接一次?這肯定會引發一些保護機制。考慮IMAP - 它內置了「長輪詢」(「IDLE」命令 - 服務器在收到新郵件時通知客戶端)。 POP3似乎是這種工作的錯誤工具。 – Piskvor

+0

@Piskvor謝謝。我將其更改爲IMAP並解決了問題。 – adnanturken

回答

1

您沒有顯示您的所有代碼,但我假設您將POP3控件連接到服務器......最終,服務器將您關閉並斷開與您的連接。

connect 
checkmessages 
save messages 
disconnect 

只要您正確斷開連接,您應該可以通過POP3每30-60秒連接一次。但是,如果您想保持連接並立即更新新郵件,那麼這就是IMAP功能,而不是POP3。

+0

我正在斷開連接,仍然服務器拒絕我的連接請求,無論如何我將其更改爲IMAP,這解決了我的問題。謝謝。 – adnanturken

0

30秒太頻繁。使用更長的時間間隔,比如說至少幾分鐘。

至於在連接到POP3服務器時沒有收到新電子郵件,則在您登錄時郵箱會被鎖定並保持鎖定狀態,直到您斷開連接。您只能看到並操縱登錄時出現的消息。這是POP3設計的核心。它不適用於通用文件夾/郵件管理。這就是IMAP特別針對的(就像你已經發現的那樣)。 POP3僅用於下載和刪除郵件,因此只需下載/刪除郵件,斷開連接,然後等待一段時間再重新執行一次。