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

tyu7yeag  于 2022-12-12  发布在  其他
关注(0)|答案(2)|浏览(151)

RFC 3501在第6.1.2节中指出,您应该使用NOOP命令进行轮询。
虽然在TIdIMAP4中只有KeepAlive方法使用它,它是作为一个过程实现的,也就是说,不返回任何东西。
那么,如何检查状态更新,例如新消息或读取状态更改?即,如何使用TIdIMAP4进行手动轮询?执行此操作涉及哪些方法和属性?以及如何获取这些消息的(U)ID?
或者,是否可以使用RFC 2177中指定的IDLE命令来避免轮询并自动获取更新?

neskvpey

neskvpey1#

IMAP在技术上是一个异步协议,但是TIdIMAP4当前被实现为同步客户端。因此,意外/无序数据要么被丢弃,要么被视为未标记数据,要么被视为错误数据,这取决于时间和上下文。未标记/额外数据可以从TIdIMAP4.LastCmdResult属性访问,您可以将该属性类型转换为TIdReplyIMAP4以访问其Extra子属性。
IDLE目前在TIdIMAP4中不受支持。Indy的问题跟踪器(请参阅herehere)中提供了在未来版本(可能是Indy 11)中添加IDLE支持的标签。在此之前,您必须定期轮询邮箱信封,跟踪您已经看到的邮件,以便检测新邮件。

vybvopom

vybvopom2#

是的,您可以使用IDLE来避免使用NOOP,通常这是一个好主意。
然而,这不会给予你任何结果。在某种程度上,IMAP命令没有结果。它们告诉服务器你想要什么,服务器告诉你什么。服务器也可以出于其他原因自由地告诉你什么,包括它的善良。
你可能会说NOOP的意思是“嗨,服务器,现在是告诉我事情的好时机,我在听”,而IDLE的意思是“嗨,服务器,我一直在听,所以只要你想告诉我任何你想要的东西,无论何时”。
服务器将向您发送EXISTSFETCH和其他响应,我希望TidIMAP4以某种方式将这些响应转发给您。(是的,它们被称为响应,即使它们不是响应您的任何命令。例如,它们可能是响应其他人向您发送的邮件而发送的。愚蠢的命名。)

相关问题