【问题标题】:Indy POP3 periodically receiving e-mailsIndy POP3 定期接收电子邮件
【发布时间】:2011-12-13 11:43:26
【问题描述】:

我正在尝试使用 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(谷歌应用程序)解决这个问题。

感谢您的帮助。

【问题讨论】:

  • 每 30 秒连接一次?那肯定会触发一些保护机制。考虑 IMAP - 它具有内置的“长轮询”(IDLE 命令 - 服务器在收到新邮件时通知客户端)。 POP3 似乎不适合这种工作。
  • @Piskvor 谢谢。我将其更改为 IMAP 并解决了问题。

标签: delphi gmail pop3 indy


【解决方案1】:

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

connect
checkmessages
save messages
disconnect

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

【讨论】:

  • 我正在断开连接,但服务器仍然拒绝我的连接请求,无论如何我将其更改为 IMAP,这解决了我的问题。谢谢。
【解决方案2】:

30 秒太频繁了。使用更长的时间间隔,至少几分钟。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多