如何在Delphi Indy中同步消息状态更新

时间:2013-12-05 10:28:05

标签: delphi imap indy indy10

RFC 3501 states in section 6.1.2.您应该使用NOOP命令进行轮询。

虽然在TIdIMAP4中只有KeepAlive方法使用它,但它是作为一个过程实现的,即不会返回任何内容。

那么如何检查状态更新,例如新消息或读取状态更改?即如何使用TIdIMAP4进行手动轮询?这样做涉及哪些方法和属性?以及如何获取(U)ID这些消息?

或者甚至可以使用RFC 2177中指定的IDLE命令来避免轮询并自动获取更新?

塞巴斯蒂安

2 个答案:

答案 0 :(得分:3)

IMAP在技术上是一种异步协议,但TIdIMAP4目前是作为同步客户端实现的。因此,意外/无序数据要么被丢弃,要么被视为未标记数据,要么被视为错误数据,具体取决于时间和上下文。可以从TIdIMAP4.LastCmdResult属性访问未标记/额外数据,您可以将其输入到TIdReplyIMAP4以访问其Extra子属性。

IDLE目前不支持

TIdIMAP4。 Indy的问题跟踪器(请参阅herehere)中的门票可以在将来的版本中添加IDLE支持,可能在Indy 11中。在此之前,您必须定期轮询邮箱信封,跟踪您已经看过的邮件,以便检测新邮件。

答案 1 :(得分:2)

是的,您可以使用IDLE来避免NOOP,一般来说这是一个好主意。

然而,这不会给你任何结果。在某种程度上,IMAP命令没有结果。他们告诉服务器你想要什么,服务器会告诉你什么。服务器也可以自由地告诉你其他原因,包括内心的善良。

您可能会说NOOP表示“喜欢服务器,现在是告诉我事情的好时机,我正在倾听”而IDLE表示“喜欢服务器,我一直在听,所以只要你想要,就告诉我你想做什么。两者也意味着“和btw,如果你有一个,重新启动你的不活动超时”。

服务器会向您发送EXISTSFETCH和其他回复,我希望TIdIMAP4会以某种方式转发给您。 (是的,它们被称为响应,即使它们不响应您的任何命令。例如,它们可能会被发送以响应其他人向您发送邮件。愚蠢的命名。)