Введение
Протокол прикладного уровня для получения и хранения электронной почты.
В вычислительной технике протокол доступа к сообщениям в Интернете (IMAP) — это стандартный интернет-протокол, используемый почтовыми клиентами для получения сообщений электронной почты с почтового сервера по соединению TCP/IP. IMAP позволяет полностью управлять почтовым ящиком с помощью нескольких почтовых клиентов, поэтому клиенты обычно оставляют сообщения на сервере до тех пор, пока пользователь явно их не удалит. IMAP-сервер обычно прослушивает порт 143. IMAP с использованием SSL/TLS (IMAPS) использует порт 993. Практически все современные почтовые клиенты и серверы поддерживают IMAP, который, наряду с более ранним протоколом POP3 (Post Office Protocol), является одним из двух наиболее распространенных стандартных протоколов для получения электронной почты. Многие веб-провайдеры электронной почты, такие как Gmail и Outlook.com, также поддерживают как IMAP, так и POP3.
IMAP was designed with the goal of permitting complete management of an email box by multiple email clients, therefore clients generally leave messages on the server until the user explicitly deletes them. An IMAP server typically listens on port number 143. IMAP over SSL/TLS (IMAPS) is assigned the port number 993. Virtually all modern e mail clients and servers support IMAP, which along with the earlier POP3 (Post Office Protocol) are the two most prevalent standard protocols for email retrieval. Many webmail service providers such as Gmail and Outlook. com also provide support for both IMAP and POP3.
Протоколы электронной почты
Протокол доступа к сообщениям в Интернете (Internet Message Access Protocol) — это протокол прикладного уровня Интернета, позволяющий почтовому клиенту получать доступ к электронной почте на удалённом почтовом сервере. Текущая версия определяется стандартом. Обычно сервер IMAP прослушивает известный порт 143, а IMAP с использованием SSL/TLS (IMAPS) — порт 993. Почти все почтовые серверы поддерживают протоколы POP и IMAP для получения электронной почты, предоставляя пользователям широкий выбор почтовых клиентов, таких как Pegasus Mail или Mozilla Thunderbird, для доступа к этим серверам и позволяя использовать эти клиенты с другими серверами. Почтовые клиенты, использующие IMAP, как правило, оставляют сообщения на сервере до тех пор, пока пользователь не удалит их явно. Эта и другие особенности работы IMAP позволяют нескольким клиентам управлять одним и тем же почтовым ящиком. Большинство почтовых клиентов поддерживают IMAP в дополнение к протоколу POP для получения сообщений. IMAP обеспечивает доступ к хранилищу почты. Клиенты могут хранить локальные копии сообщений, но они рассматриваются как временный кэш.
Оригинальный IMAP
Первоначальный протокол промежуточного доступа к почте был реализован в виде клиентской программы для Xerox Lisp Machine и серверной программы для TOPS 20. Никаких копий оригинальной спецификации промежуточного протокола или его программного обеспечения не сохранилось. Хотя некоторые его команды и ответы были схожи с IMAP2, промежуточный протокол не поддерживал тегирование команд/ответов и, следовательно, его синтаксис был несовместим со всеми остальными версиями IMAP.
IMAP2
Временный протокол был быстро заменен протоколом интерактивного доступа к почте (IMAP2), определенным в 1988 году и позднее обновленным в 1990 году. IMAP2 представил систему тегов команд и ответов и стал первой общедоступной версией.
IMAP3
IMAP3 — крайне редкий вариант протокола IMAP. IMAP3 так и не получил распространения. IESG в 1993 году отнес RFC1203 "Интерактивный протокол доступа к почте – Версия 3" к историческим протоколам. Рабочая группа по разработке IMAP использовала RFC 1176 (IMAP2), а не RFC 1203 (IMAP3) в качестве основы для своей работы.
IMAP2bis
С появлением MIME протокол IMAP2 был расширен для поддержки структур тела MIME и добавления функциональности управления почтовым ящиком (создание, удаление, переименование, загрузка сообщений), которой не было в IMAP2. Эта экспериментальная версия получила название IMAP2bis; её спецификация так и не была опубликована в окончательном виде. В октябре 1993 года рабочая группа IETF по протоколу IMAP опубликовала черновик IMAP2bis в сети Интернет. Этот черновик основывался на следующих более ранних спецификациях: неопубликованном документе IMAP2bis в формате TXT, и (IMAP2). Черновик IMAP2bis.TXT описывал состояние расширений IMAP2 на декабрь 1992 года. Ранние версии Pine широко распространялись с поддержкой IMAP2bis (Pine 4.00 и более поздние версии поддерживают IMAP4rev1).
IMAP4
Рабочая группа по протоколу IMAP, сформированная в IETF в начале 1990-х годов, приняла на себя ответственность за проектирование IMAP2bis. Рабочая группа IMAP решила переименовать IMAP2bis в IMAP4, чтобы избежать недоразумений.
Присоединенный и отсоединенный режимы
При использовании POP клиенты обычно подключаются к почтовому серверу на короткое время, лишь на период скачивания новых сообщений. При использовании IMAP4 клиенты часто остаются подключенными, пока активен пользовательский интерфейс, и загружают содержимое сообщений по мере необходимости. Для пользователей с большим количеством или объемными сообщениями такой способ использования IMAP4 может обеспечить более быстрое время отклика.
Отчет об внешних изменениях
После успешной аутентификации протокол POP предоставляет полностью статичное представление текущего состояния почтового ящика и не предусматривает механизм для отображения каких-либо внешних изменений состояния в течение сеанса. В отличие от этого, протокол IMAP предоставляет динамичное представление и требует, чтобы внешние изменения состояния, включая новые сообщения, а также изменения, внесенные в почтовый ящик другими одновременно подключенными клиентами, обнаруживались и соответствующие ответы отправлялись между командами, а также во время команды IDLE, как описано в разделе 5.2, который специально упоминает "одновременный доступ к одному и тому же почтовому ящику несколькими агентами".
Доступ к частям сообщений MIME и частичный поиск
Обычно вся электронная почта в Интернете передается в формате MIME, позволяющем сообщениям иметь древовидную структуру, где конечные узлы (листья) представляют собой различные типы контента, состоящие из одной части, а промежуточные узлы – различные многокомпонентные типы. Протокол IMAP4 позволяет клиентам извлекать отдельные части MIME независимо друг от друга, а также извлекать фрагменты отдельных частей или всего сообщения целиком. Эти механизмы позволяют клиентам извлекать только текстовую часть сообщения, не загружая прикрепленные файлы, или осуществлять потоковую передачу контента по мере его получения.
Информация о состоянии сообщения
С помощью флагов, определенных в протоколе IMAP4, клиенты могут отслеживать состояние сообщений: например, прочитано ли сообщение, есть ли на него ответ или удалено ли оно. Эти флаги хранятся на сервере, поэтому различные клиенты, обращающиеся к одному и тому же почтовому ящику в разное время, могут обнаруживать изменения состояния, внесенные другими клиентами. POP не предоставляет механизма для хранения клиентами такой информации о состоянии на сервере, поэтому, если один пользователь получает доступ к почтовому ящику с помощью двух разных POP-клиентов (в разное время), информация о состоянии, например, было ли сообщение просмотрено, не может быть синхронизирована между клиентами. Протокол IMAP4 поддерживает как предопределенные системные флаги, так и определяемые клиентом ключевые слова. Системные флаги указывают информацию о состоянии, например, было ли сообщение прочитано. Ключевые слова, которые поддерживаются не всеми IMAP-серверами, позволяют присваивать сообщениям один или несколько тегов, значение которых определяется клиентом. Ключевые слова IMAP не следует путать с проприетарными метками веб-сервисов электронной почты, которые иногда преобразуются в папки IMAP соответствующими проприетарными серверами.
Несколько почтовых ящиков на сервере
Клиенты IMAP4 могут создавать, переименовывать и удалять почтовые ящики (обычно отображаемые пользователю как папки) на сервере, а также копировать сообщения между почтовыми ящиками. Поддержка множественных почтовых ящиков также позволяет серверам предоставлять доступ к общим и публичным папкам. Для регулирования прав доступа может использоваться расширение IMAP4 Access Control List (ACL).
Поиски на сервере
IMAP4 предоставляет механизм, позволяющий клиенту запрашивать у сервера поиск сообщений, соответствующих различным критериям. Этот механизм позволяет избежать необходимости скачивать все сообщения из почтового ящика для выполнения этих поисков.
Встроенный механизм удлинения
В соответствии с опытом, полученным при использовании более ранних интернет-протоколов, IMAP4 определяет явный механизм для своего расширения. Многие расширения IMAP4 к базовому протоколу были предложены и широко используются. IMAP2bis не имел механизма расширения, а POP теперь имеет такой механизм, определенный .
Уведомления о прохождении сервера
IMAP IDLE предоставляет способ для почтового сервера уведомлять подключенных клиентов об изменениях в почтовом ящике, например, о поступлении нового письма. POP не имеет подобной функции, и почтовым клиентам необходимо периодически подключаться к POP-серверу для проверки наличия новой почты.
Недостатки
Хотя IMAP устраняет многие недостатки POP, это неизбежно вносит дополнительную сложность. Большая часть этой сложности (например, одновременный доступ нескольких клиентов к одному и тому же почтовому ящику) компенсируется серверными решениями, такими как Maildir или серверные базы данных. Спецификация IMAP подвергалась критике за недостаточную строгость и допущение поведения, которое фактически нивелирует её полезность. Например, в спецификации указано, что каждое сообщение, хранящееся на сервере, имеет "уникальный идентификатор" (UID), позволяющий клиентам идентифицировать сообщения, которые они уже видели между сессиями. Однако спецификация также допускает аннулирование этих UID практически без ограничений, что сводит на нет их назначение. С административной и ресурсной точки зрения, протокол IMAP можно рассматривать как раннюю реализацию облачных вычислений, поскольку IMAP предназначен для хранения структуры почтового ящика (содержимого, структуры папок, состояния отдельных сообщений и т. д.) на почтовом сервере, в то время как в POP все это хранится на локальном устройстве пользователя. Таким образом, IMAP требует значительно больше серверных ресурсов, что приводит к существенно более высоким затратам на почтовый ящик. Если алгоритмы хранения, индексации и поиска почты на сервере не реализованы тщательно, клиент потенциально может потреблять большие объемы серверных ресурсов при поиске в больших почтовых ящиках. Клиентам IMAP4 необходимо поддерживать TCP/IP-соединение с сервером IMAP для получения уведомлений о поступлении новой почты. Уведомление о поступлении почты осуществляется посредством сигнализации в полосе пропускания, что в некоторой степени усложняет обработку протокола IMAP на стороне клиента. Частный проект под названием push IMAP предполагал расширение IMAP для реализации push-уведомлений по электронной почте путем отправки всего сообщения, а не только уведомления. Однако push IMAP не получил широкого распространения, и текущие работы IETF решают эту проблему другими способами (см. профиль Lemonade для получения дополнительной информации). В отличие от некоторых проприетарных протоколов, объединяющих операции отправки и получения, отправка сообщения и сохранение его копии в папке на стороне сервера с использованием базового IMAP-клиента требует передачи содержимого сообщения дважды: один раз через SMTP для доставки и второй раз через IMAP для сохранения в папке "Отправленные". Это решается набором расширений, определенных IETF Lemonade Profile для мобильных устройств: URLAUTH и CATENATE в IMAP и BURL в SMTP SUBMISSION. Кроме того, Courier Mail Server предлагает нестандартный метод отправки с использованием IMAP путем копирования исходящего сообщения в специальную папку "Исходящие".
Безопасность
Для криптографической защиты IMAP-соединений между клиентом и сервером можно использовать IMAPS на TCP-порту 993, использующий SSL/TLS. Альтернативно, STARTTLS можно использовать для шифрования соединения при подключении к порту 143 после первоначального обмена данными в незашифрованном виде.