0

该方案是 Windows 服务使用 OpenPOP 连接到 Outlook.com 或 gmail.com POP3 帐户。如果有任何电子邮件,它会查找现有电子邮件(即client.getMessageCount()返回大于零的值)。

该服务保持连接打开并重新检查新消息。

问题是,如果我在服务连接向该帐户发送电子邮件,则getMessageCount()始终返回零,直到服务自动重新循环弹出连接。

我希望有人遇到过同样的问题。

我无法通过更频繁的弹出断开/重新连接来解决问题,因为某些提供商(如 Outlook.com)对连接之间的时间有限制。

4

1 回答 1

1

POP3 规范提到邮箱在客户端打开时被锁定。因此不会出现任何消​​息。

考虑这种情况:大多数服务器为新消息分配的消息编号较低。您刚刚获取了所有消息编号:

1 - Foo message
2 - Bar message

您现在想要删除 Foo 消息,但服务器将 maildrop 更新为如下所示:

1 - Baz message
2 - Foo message
3 - Bar message

您发送命令 DELE 1,现在标记了要删除的 Baz 而不是 Foo 消息。POP3 协议是在互联网资源稀少且您并不总是连接时开发的。如果您想对 maildrop 进行实时更新,您应该使用更新的 IMAP 协议。

如果您继续使用 POP3,则必须断开连接并重新连接才能获得更新。请注意,大多数服务器不允许客户端以快速方式继续连接/断开连接,如果您连接太频繁,它们将简单地拒绝您的身份验证。

另请注意,Gmail 有一个奇怪的 POP3 实现。请参阅当 Gmail 以编程方式用作 POP3 服务器时,它表现出哪些非标准行为功能?

于 2013-06-18T07:50:11.833 回答