Открыть сервис

IMAP IDLE

IMAP IDLE — это расширение протокола IMAP (Internet Message Access Protocol), определённое в RFC 2177, которое позволяет почтовому клиенту поддерживать постоянное соединение с сервером и получать уведомления о новых сообщениях в реальном времени без необходимости периодически опрашивать сервер (polling). Технология обеспечивает мгновенную доставку уведомлений о поступлении новой почты, изменении статуса сообщений (прочитано, удалено) или перемещении писем между папками.

История и развитие

Протокол IMAP был разработан в 1986 году Марком Криспином как альтернатива POP3, предоставляющая возможность работы с почтой непосредственно на сервере. Однако в ранних версиях IMAP (IMAP2, IMAP3) отсутствовала функция push-уведомлений. Клиенты были вынуждены периодически отправлять команду NOOP (No Operation) для проверки наличия новых сообщений, что создавало избыточную нагрузку на сервер и сеть.

Расширение IMAP IDLE было предложено в 1997 году в RFC 2177 (автор — Барри Лейба). Оно стало частью стандарта IMAP4rev1 (RFC 3501, 2003 год) как опциональная возможность. Первоначально поддержка IDLE была реализована в серверах Cyrus IMAP и Dovecot, а затем — в Microsoft Exchange, Gmail, Яндекс.Почте и других крупных почтовых системах.

Принцип работы

Традиционный polling (опрос)

В обычном режиме работы IMAP клиент периодически (например, каждые 1–5 минут) отправляет команду NOOP. Сервер в ответ возвращает статус почтового ящика (количество новых сообщений, непрочитанных писем и т.д.). Если изменений нет, клиент продолжает цикл. Этот подход приводит к следующим проблемам:

  • Задержка уведомлений: письмо может быть доставлено, но клиент узнает о нём только через интервал опроса.
  • Избыточный трафик: даже при отсутствии изменений клиент отправляет запросы.
  • Нагрузка на сервер: при большом количестве клиентов (например, в корпоративной среде) сервер обрабатывает множество пустых запросов.

Режим IDLE

При использовании IMAP IDLE клиент отправляет команду IDLE и переходит в режим ожидания. Сервер удерживает соединение открытым и отправляет клиенту асинхронные уведомления (unsolicited responses) при любых изменениях в почтовом ящике. Типичные уведомления:

  • EXISTS — появление нового сообщения.
  • RECENT — появление нового сообщения (устаревший флаг, не используется в современных реализациях).
  • FETCH — изменение флагов сообщения (прочитано, помечено флагом, удалено).
  • EXPUNGEудаление сообщения.

Клиент может выйти из режима IDLE в любой момент, отправив команду DONE. После этого он может выполнить другие операции (например, загрузить новое письмо) и снова войти в режим IDLE.

Пример сессии

`` C: a001 LOGIN user@example.com password S: a001 OK LOGIN completed C: a002 SELECT INBOX S: 5 EXISTS S: 2 RECENT S: a002 OK [READ-WRITE] SELECT completed C: a003 IDLE S: + idling ... (сервер ожидает) S: 6 EXISTS (новое письмо) S: 1 FETCH (FLAGS (\Seen)) (письмо прочитано другим клиентом) C: DONE S: a003 OK IDLE terminated ``

Преимущества и недостатки

Преимущества

  • Мгновенная доставка уведомлений: письмо отображается в клиенте в течение секунд после поступления на сервер.
  • Снижение нагрузки на сервер: сервер отправляет уведомления только при наличии изменений, а не обрабатывает пустые запросы.
  • Экономия трафика: объём передаваемых данных в режиме IDLE минимален (только уведомления).
  • Энергоэффективность: на мобильных устройствах (смартфоны, планшеты) постоянное соединение потребляет меньше энергии, чем периодический опрос с пробуждением радиомодуля.

Недостатки

  • Постоянное сетевое соединение: клиент должен поддерживать TCP-соединение с сервером, что может быть проблематично при нестабильном интернете или за прокси-серверами, разрывающими длительные соединения.
  • Уязвимость к обрывам связи: при разрыве соединения клиент не получает уведомления, пока не переподключится и не войдёт в режим IDLE снова.
  • Совместимость: не все почтовые серверы поддерживают IMAP IDLE, особенно старые или упрощённые реализации.
  • Безопасность: длительное соединение может быть использовано для атак типа «долгий опрос» (long-polling), хотя современные серверы имеют защиту от таких сценариев.

Реализации и поддержка

Серверы

  • Dovecot: одна из самых популярных реализаций IMAP IDLE, поддерживается по умолчанию.
  • Cyrus IMAP: поддерживает IDLE с версии 2.0.
  • Microsoft Exchange: поддерживает IDLE через протокол Exchange ActiveSync (EAS) и IMAP4.
  • Gmail: поддерживает IMAP IDLE, но с ограничением — сервер может отключать бездействующие соединения через 10–30 минут.
  • Яндекс.Почта: поддерживает IMAP IDLE, но также имеет таймаут соединения (обычно 10 минут).
  • Mail.ru: поддерживает IMAP IDLE с 2015 года.

Клиенты

  • Mozilla Thunderbird: поддерживает IDLE с версии 1.5, но требует включения в настройках (учётная запись → Настройки сервера → «Использовать IDLE для уведомлений»).
  • Microsoft Outlook: поддерживает IDLE через IMAP, но реализация может отличаться в зависимости от версии.
  • Apple Mail: поддерживает IDLE на macOS и iOS.
  • K-9 Mail (Android): один из первых мобильных клиентов с поддержкой IDLE.
  • FairEmail (Android): активно использует IDLE для push-уведомлений.
  • Почтовые клиенты на базе библиотек libEtPan! и MailCore: поддерживают IDLE.

Альтернативы

  • IMAP NOTIFY (RFC 5465): более современное расширение, позволяющее подписываться на определённые типы событий (например, только на новые сообщения в папке «Входящие»). Поддерживается в Dovecot с версии 2.3.
  • Push-уведомления через HTTP: многие почтовые сервисы (Gmail, Яндекс) предоставляют API для push-уведомлений, которые работают через постоянные HTTPS-соединения (WebSocket, Server-Sent Events).
  • Exchange ActiveSync (EAS): протокол Microsoft для мобильных устройств, реализующий push-уведомления через постоянное соединение.
  • WebSocket IMAP: экспериментальные реализации, использующие WebSocket для обхода ограничений TCP.

Безопасность и ограничения

IMAP IDLE не шифрует данные по умолчанию. Для защиты соединения рекомендуется использовать IMAPS (IMAP over TLS) на порту 993 или STARTTLS на порту 143. Серверы могут ограничивать количество одновременных IDLE-соединений с одного IP-адреса или пользователя, чтобы предотвратить исчерпание ресурсов.

Некоторые почтовые провайдеры отключают поддержку IDLE для бесплатных аккаунтов или ограничивают время бездействия (например, до 10 минут). В таких случаях клиент должен переподключаться и повторно входить в режим IDLE.

Применение

IMAP IDLE используется в:

  • Корпоративных почтовых системах (Microsoft Exchange, CommuniGate Pro, Zimbra) для мгновенной доставки писем сотрудникам.
  • Мобильных почтовых клиентах (K-9 Mail, FairEmail, Spark) для push-уведомлений.
  • Веб-почтовых интерфейсах (Roundcube, SquirrelMail) — через JavaScript-клиенты, поддерживающие IDLE.
  • Системах автоматизации (например, для мониторинга почтовых ящиков и триггеров событий).

Источники

  1. RFC 2177 — IMAP4 IDLE command.
  2. RFC 3501 — IMAP4rev1.
  3. RFC 5465 — IMAP NOTIFY extension.
  4. Документация Dovecot по IMAP IDLE.
  5. Документация Cyrus IMAP по IMAP IDLE.
  6. Справка Gmail по настройкам IMAP.
  7. Справка Яндекс.Почты по протоколам.
  8. Статья «IMAP IDLE: The Push Email Protocol» на сайте Mailgun.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →