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



RFC 3501在第6.1.2节中说明。您应该使用NOOP命令进行轮询。

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

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

或者,是否可以使用RFC 2177中指定的IDLE命令来避免轮询并自动获得更新?

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

TIdIMAP4当前不支持IDLE。Indy的问题跟踪器中有一些票证(请参阅此处和此处),可以在未来的版本中添加IDLE支持,可能在Indy 11中。在此之前,您必须定期轮询邮箱信封,跟踪您已经看到的邮件,以便检测新邮件。

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

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

你可能会说NOOP的意思是"嗨,服务器,现在是告诉我事情的好时机,我在听",IDLE的意思是:"嗨,我一直在听,所以只要你想告诉我什么就告诉我什么"。两者的意思都是"顺便说一句,如果有不活动超时,请重新启动"。

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

最新更新