2011-12-13 291 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仅用于下载和删除邮件,因此只需下载/删除邮件,断开连接,然后等待一段时间再重新执行一次。