【发布时间】: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 并解决了问题。