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

尽管在TIdIMAP4中仅使用KeepAlive方法,该方法是作为过程实现的,即不返回任何内容。

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

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

塞巴斯蒂安

最佳答案

IMAP从技术上讲是异步协议,但是TIdIMAP4当前被实现为同步客户端。这样,取决于时间和上下文,意外/无序数据将被丢弃,被视为未标记数据或被视为错误数据。可以从TIdIMAP4.LastCmdResult属性访问未标记/额外的数据,您可以将其键入强制转换为TIdReplyIMAP4以访问其Extra子属性。

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

10-05 22:41