Ответ 1
Как вы знаете, целью команды 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.