Indy POP3定期接收电子邮件

时间:2011-12-13 11:43:27

标签: delphi gmail pop3 indy

我正在尝试使用delphi构建一个应用程序,它必须每隔30秒检查一次gmail收件箱,并且必须处理特殊用途的电子邮件。

使用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;

我有一个问题,我将在下面解释;

  • 如果我在30秒后断开并连接POP3,经过一些尝试 服务器拒绝我的连接,我得到“套接字错误”。如果我不尝试 连接每30秒只需每30秒检索一次电子邮件 我没有收到新的电子邮件。
  • 而且,如果我没有断开连接或使用“DisconnectNotifyPeer”命令,我会一次又一次地收到阅读电子邮件,但如果我能解决上面的问题,我会处理这个问题,但是关于这个问题的任何其他建议也会对我有所帮助。 。
你怎么看?我该怎么做才能解决这个问题,不是每30秒连接一次,而是接收新的电子邮件?是否有任何命令或函数可以像ADO Requery方法那样起作用?

顺便说一句,我已经尝试过使用其他一些godaddy邮件帐户,它在工作了3到4次后也拒绝了我的连接,我想用gmail(谷歌应用程序)来解决这个问题。

谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

您没有显示所有代码,但我假设您要将POP3控件连接到服务器...最终服务器会将您停用并断开连接。

connect
checkmessages
save messages
disconnect

只要正确断开连接,您应该可以通过POP3每30-60秒连接一次。但是,如果你想保持连接并立即更新新邮件,那就是IMAP功能,而不是POP3。

答案 1 :(得分:0)

太短了30秒。使用更长的间隔,比如说至少几分钟。

对于在连接到POP3服务器时未接收新电子邮件,登录时邮箱会被锁定,并在断开连接之前保持锁定状态。您只能查看和操作登录时出现的消息。这是POP3设计的核心。它不适用于通用文件夹/消息管理。这就是IMAP专门针对的(正如您已经发现的那样)。 POP3仅用于下载和删除邮件,因此只需下载/删除邮件,断开连接,然后再等待一段时间。