IMAP MOVE¶
IMAP MOVE — это расширение протокола IMAP (Internet Message Access Protocol), определённое в спецификации RFC 6851, которое позволяет перемещать почтовые сообщения между папками (почтовыми ящиками) на сервере с помощью одной команды, без необходимости последовательного копирования и удаления.
¶История
Протокол IMAP, начиная с версии 4rev1 (RFC 3501, 2003 год), предоставляет базовые операции для управления почтой на сервере. Для перемещения сообщения между папками клиентское приложение традиционно выполняло две отдельные команды: COPY (копирование сообщения в целевую папку) и STORE +FLAGS (\Deleted) (пометка исходного сообщения как удалённого), после чего требовалась команда EXPUNGE (окончательное удаление). Этот двухэтапный процесс был неэффективен по нескольким причинам: он генерировал избыточный сетевой трафик, требовал от сервера обработки двух операций и мог приводить к временным состояниям, когда сообщение существовало в обеих папках одновременно.
Расширение MOVE было предложено для устранения этих недостатков. Оно было стандартизировано в 2013 году в RFC 6851 как часть более широких усилий по оптимизации работы IMAP. Основная цель — атомарность операции перемещения: либо сообщение успешно перемещается, либо не происходит никаких изменений.
¶Принцип работы
Команда MOVE принимает те же параметры, что и команда COPY: набор идентификаторов сообщений (UID или порядковые номера) и имя целевой папки. Синтаксис команды выглядит следующим образом:
`` C: a123 UID MOVE 1:5 "Trash" S: a123 OK [COPYUID 1438473612 1:5 1:5] MOVE completed ``
В ответ сервер возвращает код ответа OK с опциональным кодом COPYUID, который сообщает клиенту, какие UID были присвоены скопированным сообщениям в целевой папке. Сервер гарантирует, что после успешного выполнения команды сообщения с указанными UID больше не существуют в исходной папке, а их копии находятся в целевой.
Для порядковых номеров сообщений (без UID) команда имеет вид:
`` C: a124 MOVE 3:5 "Archive" S: a124 OK MOVE completed ``
¶Преимущества
¶Атомарность и целостность
Основное преимущество MOVE — атомарность операции. В отличие от последовательности COPY + STORE + EXPUNGE, при использовании MOVE сервер не может оказаться в состоянии, когда сообщение уже скопировано, но ещё не удалено из исходной папки. Это особенно важно при работе с большими объёмами почты или при сбоях соединения.
¶Снижение сетевого трафика
Команда MOVE заменяет две или три отдельные команды одной. Это сокращает количество пакетов, передаваемых между клиентом и сервером, что особенно заметно при медленных или нестабильных соединениях (например, мобильный интернет).
¶Уменьшение нагрузки на сервер
Серверу не нужно обрабатывать несколько последовательных операций. Вместо этого он может выполнить перемещение за одну транзакцию, что снижает нагрузку на дисковую подсистему и процессор.
¶Улучшение работы с флагами
При использовании MOVE сервер может корректно обрабатывать флаги сообщений (например, \Seen, \Flagged), не требуя от клиента повторной их установки в целевой папке.
¶Поддержка серверами
Расширение MOVE широко поддерживается современными почтовыми серверами. К числу популярных реализаций относятся:
- Dovecot — поддерживает MOVE с версии 2.1 (2012 год) и является эталонной реализацией RFC 6851.
- Cyrus IMAP — поддерживает MOVE с версии 2.5.
- Courier-IMAP — имеет ограниченную поддержку.
- Microsoft Exchange — поддерживает MOVE в версиях начиная с Exchange 2013.
- Zimbra — поддерживает MOVE с версии 8.0.
- Gmail — поддерживает MOVE через IMAP-интерфейс, хотя внутренняя реализация может отличаться.
¶Поддержка клиентами
Большинство современных почтовых клиентов поддерживают MOVE, хотя часто это происходит прозрачно для пользователя:
- Mozilla Thunderbird — поддерживает MOVE начиная с версии 3.0.
- Microsoft Outlook — поддерживает MOVE в версиях для Windows и Mac.
- Apple Mail — использует MOVE на всех платформах (macOS, iOS).
- Roundcube — веб-клиент с поддержкой MOVE.
- Mutt — консольный почтовый клиент, поддерживающий MOVE.
- Android Email — стандартный клиент Android поддерживает MOVE.
¶Взаимодействие с другими расширениями IMAP
MOVE часто используется совместно с другими расширениями IMAP:
- UIDPLUS (RFC 4315) — позволяет получать UID скопированных сообщений, что необходимо для корректной работы MOVE.
- QRESYNC (RFC 5162) — расширение для быстрой синхронизации, которое может использовать MOVE для оптимизации перемещения сообщений.
- CONDSTORE (RFC 4551) — позволяет отслеживать изменения в папках, что полезно при перемещении сообщений.
- LITERAL+ (RFC 2088) — ускоряет передачу больших сообщений, что может быть актуально при перемещении.
¶Ограничения и особенности
¶Неатомарность при ошибках
Хотя MOVE спроектирован как атомарная операция, в случае сбоя сервера (например, аппаратного отказа) возможно состояние, когда часть сообщений была перемещена, а часть — нет. Однако это происходит реже, чем при использовании COPY + DELETE.
¶Зависимость от реализации
Некоторые серверы могут реализовывать MOVE как последовательность COPY + DELETE под капотом, что лишает его преимуществ в производительности. Клиенты могут обнаружить это, анализируя время выполнения команды.
¶Отсутствие в IMAP4rev1
MOVE не является частью базового протокола IMAP4rev1 (RFC 3501). Серверы, не поддерживающие это расширение, должны сообщать об этом клиенту через ответ NO или BAD. Клиенты должны проверять поддержку MOVE через команду CAPABILITY.
¶Критика
Основная критика расширения MOVE связана с тем, что оно не решает всех проблем управления почтой. Например, оно не предоставляет возможности перемещать целые папки (подпапки) или изменять иерархию почтовых ящиков. Кроме того, некоторые реализации серверов могут не поддерживать MOVE для сообщений, находящихся в папках с особыми флагами (например, \Trash или \Junk).
¶Источники
- RFC 6851 — Internet Message Access Protocol (IMAP) — MOVE Extension
- RFC 3501 — Internet Message Access Protocol Version 4rev1
- RFC 4315 — Internet Message Access Protocol (IMAP) — UIDPLUS extension
- RFC 5162 — IMAP4 Extensions for Quick Mailbox Resynchronization (QRESYNC)
- RFC 4551 — IMAP4 Extension for Conditional STORE Operation (CONDSTORE)
- «Dovecot MOVE Extension» — документация Dovecot
- «Cyrus IMAP MOVE Extension» — документация Cyrus IMAP
