IMAP空闲超时

时间:2010-03-25 05:08:31

标签: imap

假设我使用IMAP IDLE来监控邮件文件夹中的更改。

IMAP规范说IDLE连接最多只能保持30分钟,但建议选择较少的分钟数 - 比如20分钟,然后取消空闲并重启。

我想知道如果邮件内容在空闲取消和创建新空闲之间发生变化会发生什么。可能会遗漏一封电子邮件。鉴于RECENT有点模糊,这可能导致在旧的空闲结束之前获得消息列表,并且新的空闲开始。

但这几乎与每20分钟一次的民意调查相同,并且失去了一些闲置的好处。

或者,可以在终止到期之前启动新的空闲会话。

但无论如何,我认为这个问题已经解决,所以我在这里寻求建议。

谢谢,

2 个答案:

答案 0 :(得分:22)

如您所知,IMAP IDLE命令(RFC 2177)的目的是使服务器能够实时向客户端传输状态更新。在此上下文中,状态更新表示未标记的IMAP服务器响应,例如EXISTS,RECENT,FETCH或EXPUNGE,这些响应在新邮件到达,邮件状态更新或邮件被删除时发送。

但是,任何IMAP命令都可以返回这些IMAP 状态更新,而不仅仅是IDLE命令 - 例如,NOOP命令(参见RFC 3501第6.1.2节)可以是用于轮询服务器更新(它早于IDLE命令)。 IDLE只能更有效地获得这些更新 - 如果你不使用IDLE命令,当客户端执行另一个命令时,服务器只会发送服务器更新(或者即使没有命令也是如此)在某些情况下正在进行中) - 有关详细信息,请参阅RFC 3501第5.2和5.3节。

这意味着如果在IDLE取消和新IDLE命令之间更改了消息,那么状态更新不应该丢失,就像它们在第一次没有使用IDLE时一样不会丢失放置(例如,每隔几秒使用一次NOOP) - 它们应该在新的IDLE命令启动后发送。

答案 1 :(得分:1)

另一种方法是记住被监控文件夹的最后一个最高uid。每当你认为有可能错过了更新。搜索如下:*