连接后未找到任何新消息

时间:2013-06-17 17:47:44

标签: c# windows-services openpop

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

该服务保持连接打开并重新检查新邮件。

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

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

我无法通过更频繁的pop diconnect / reconnects解决问题,因为某些提供商(如outlook.com)对连接之间的时间有限制。

1 个答案:

答案 0 :(得分:1)

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

想想这种情况:大多数服务器都会为新消息分配一个低消息编号。您刚刚获取了所有消息号:

1 - Foo message
2 - Bar message

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

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

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

如果您继续使用POP3,则必须断开连接并再次连接才能进行更新。请注意,大多数服务器不允许客户端以快速方式继续连接/断开连接,如果您经常连接,他们将拒绝您的身份验证。

另请注意,Gmail有一个奇怪的POP3实现。见What non-standard behaviour features does Gmail exhibit, when it is programmatically used as a POP3 server?