开发者

IMAP Idle Timeout

开发者 https://www.devze.com 2022-12-24 10:10 出处:网络
Lets say I am using IMAP IDLE to monitor changes in a mail folder. The IMAP spec says that IDLE connections should only stay alive for 30 minutes max, but it is recommended that a lower number of min

Lets say I am using IMAP IDLE to monitor changes in a mail folder.

The IMAP spec says that IDLE connections should only stay alive for 30 minutes max, but it is recommended that a lower number of minutes is selected - say 20 minutes, then cancel the idle and restart.

I am wondering what would happen if the mail contents changed between the idle canceling, and the new idle being开发者_开发百科 created. An email could potentially be missed. Given that RECENT is a bit vague, this could lead to getting a message list before the old idle ends, and a new idle starts.

But this is almost the same as polling every 20 minutes, and defeats some of the benefit of idle.

Alternatively, a new idle session could be started prior to terminating the expiring one.

But in any case, I think this problem has already been solved so here I am asking for recommendations.

Thanks,

Paul


As you know, the purpose of IMAP IDLE command (RFC 2177) is to make it possible to have the server transmit status updates to the client in real time. In this context, status updates means untagged IMAP server responses such as EXISTS, RECENT, FETCH or EXPUNGE that are sent when new messages arrive, message status is updated or a message is removed.

However, these IMAP status updates can be returned by any IMAP command, not just the IDLE command - for example, the NOOP command (see RFC 3501 section 6.1.2) can be used to poll for server updates as well (it predates the IDLE command). IDLE only makes it possible to get these updates more efficiently - if you don't use IDLE command, server updates will simply be sent by the server when the client executes another command (or even when no command is in progress in some cases) - see RFC 3501 section 5.2 and 5.3 for details.

This means that if a message is changed between the IDLE canceling and the new IDLE command, the status updates should not be lost, just as they are not lost if you never used IDLE in the first place (and use NOOP every few seconds instead, for example) - they should simply be sent after the new IDLE command is started.


Another approach would be to remember last highest uid of the folder being monitored. Whenever you think there is chance that you missed update. Do a search as follows :*

0

精彩评论

暂无评论...
验证码 换一张
取 消