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