набор интернет-протоколов |
---|
Уровень приложений |
Transport layer |
Internet layer |
Link layer |
В вычислительной технике протокол доступа к сообщениям в Интернете ( IMAP ) — это стандартный протокол Интернета , используемый почтовыми клиентами для получения сообщений электронной почты с почтового сервера через соединение TCP/IP . [1] IMAP определен в RFC 9051.
IMAP был разработан с целью разрешить полное управление почтовым ящиком несколькими почтовыми клиентами, поэтому клиенты обычно оставляют сообщения на сервере до тех пор, пока пользователь явно не удалит их. Сервер IMAP обычно прослушивает порт с номером 143. IMAP через SSL/TLS ( IMAPS ) назначается порт с номером 993. [2] [3]
Практически все современные почтовые клиенты и серверы поддерживают IMAP, который наряду с более ранним POP3 (Post Office Protocol) является двумя наиболее распространенными стандартными протоколами для получения электронной почты. [4] Многие поставщики услуг веб-почты, такие как Gmail и Outlook.com, также предоставляют поддержку как IMAP, так и POP3.
Internet Message Access Protocol — это интернет-протокол прикладного уровня , который позволяет почтовому клиенту получать доступ к электронной почте на удаленном почтовом сервере . Текущая версия определена RFC 9051. Сервер IMAP обычно прослушивает известный порт 143, тогда как IMAP через SSL/TLS (IMAPS) использует 993. [2] [3]
Входящие сообщения электронной почты отправляются на сервер электронной почты, который сохраняет сообщения в почтовом ящике получателя. Пользователь извлекает сообщения с помощью почтового клиента, который использует один из ряда протоколов извлечения электронной почты. Хотя некоторые клиенты и серверы предпочитают использовать специфичные для поставщика, фирменные протоколы [5] , почти все поддерживают POP и IMAP для извлечения электронной почты, что позволяет свободно выбирать между многими почтовыми клиентами, такими как Pegasus Mail или Mozilla Thunderbird, для доступа к этим серверам, и позволяет клиентам использоваться с другими серверами .
Клиенты электронной почты, использующие IMAP, обычно оставляют сообщения на сервере до тех пор, пока пользователь явно не удалит их. Эта и другие характеристики работы IMAP позволяют нескольким клиентам управлять одним и тем же почтовым ящиком. Большинство клиентов электронной почты поддерживают IMAP в дополнение к протоколу Post Office Protocol (POP) для извлечения сообщений. [6] IMAP предлагает доступ к почтовому хранилищу. Клиенты могут хранить локальные копии сообщений, но они считаются временным кэшем.
IMAP был разработан Марком Криспином в 1986 году как протокол удаленного доступа к почтовому ящику, в отличие от широко распространенного протокола POP, предназначенного для простого извлечения содержимого почтового ящика.
До появления текущей ВЕРСИИ 4rev2 (IMAP4) он прошел ряд итераций, как подробно описано ниже:
Первоначальный протокол Interim Mail Access Protocol был реализован как клиент Xerox Lisp Machine и сервер TOPS-20 .
Копий оригинальной спецификации временного протокола или его программного обеспечения не существует. [7] [8] Хотя некоторые из его команд и ответов были похожи на IMAP2, временный протокол не имел тегов команд/ответов, и поэтому его синтаксис был несовместим со всеми другими версиями IMAP.
Временный протокол был быстро заменен протоколом интерактивного почтового доступа (IMAP2), определенным в RFC 1064 (в 1988 году) и позднее обновленным в RFC 1176 (в 1990 году). IMAP2 ввел тегирование команд/ответов и стал первой публично распространяемой версией.
IMAP3 — чрезвычайно редкий вариант IMAP. [9] Он был опубликован как RFC 1203 в 1991 году. Он был написан специально как встречное предложение RFC 1176, который сам предлагал модификации IMAP2. [10] IMAP3 так и не был принят рынком. [11] [12] IESG переклассифицировал RFC1203 «Протокол интерактивного доступа к почте — версия 3» как исторический протокол в 1993 году. Рабочая группа IMAP использовала RFC 1176 (IMAP2), а не RFC 1203 (IMAP3) в качестве отправной точки. [13] [14]
С появлением MIME IMAP2 был расширен для поддержки структур тела MIME и добавления функциональности управления почтовыми ящиками (создание, удаление, переименование, загрузка сообщений), которая отсутствовала в IMAP2. Эта экспериментальная версия называлась IMAP2bis; ее спецификация никогда не публиковалась в нечерновом виде. Интернет-черновик IMAP2bis был опубликован рабочей группой IETF IMAP в октябре 1993 года. Этот черновик был основан на следующих более ранних спецификациях: неопубликованный документ IMAP2bis.TXT , RFC 1176 и RFC 1064 (IMAP2). [15] Черновик IMAP2bis.TXT документировал состояние расширений IMAP2 по состоянию на декабрь 1992 года. [16] Ранние версии Pine были широко распространены с поддержкой IMAP2bis [9] (Pine 4.00 и более поздние версии поддерживают IMAP4rev1).
Рабочая группа IMAP, сформированная в IETF в начале 1990-х годов, взяла на себя ответственность за разработку IMAP2bis. Рабочая группа IMAP решила переименовать IMAP2bis в IMAP4, чтобы избежать путаницы.
При использовании POP клиенты обычно подключаются к почтовому серверу на короткое время, только на время, необходимое для загрузки новых сообщений. При использовании IMAP4 клиенты часто остаются подключенными, пока активен пользовательский интерфейс, и загружают содержимое сообщений по требованию. Для пользователей с большим количеством или большими сообщениями эта модель использования IMAP4 может привести к более быстрому времени отклика.
После успешной аутентификации протокол POP предоставляет полностью статическое представление текущего состояния почтового ящика и не предоставляет механизма для отображения каких-либо внешних изменений состояния во время сеанса (клиент POP должен повторно подключиться и повторно аутентифицироваться, чтобы получить обновленное представление). Напротив, протокол IMAP предоставляет динамическое представление и требует, чтобы внешние изменения состояния, включая вновь поступившие сообщения, а также изменения, внесенные в почтовый ящик другими одновременно подключенными клиентами, были обнаружены, и соответствующие ответы были отправлены между командами, а также во время команды IDLE , как описано в RFC 2177. См. также раздел 5.2 RFC 3501, в котором конкретно упоминается «одновременный доступ к одному и тому же почтовому ящику несколькими агентами».
Обычно вся интернет-почта передается в формате MIME , что позволяет сообщениям иметь древовидную структуру , где конечные узлы являются любыми из множества типов содержимого из одной части, а неконечные узлы являются любыми из множества типов содержимого из нескольких частей. Протокол IMAP4 позволяет клиентам извлекать любые отдельные части MIME по отдельности, а также извлекать части отдельных частей или всего сообщения. Эти механизмы позволяют клиентам извлекать текстовую часть сообщения без извлечения прикрепленных файлов или транслировать содержимое по мере его извлечения.
Используя флаги, определенные в протоколе IMAP4, клиенты могут отслеживать состояние сообщения: например, было ли прочитано сообщение, на него был дан ответ или оно было удалено. Эти флаги хранятся на сервере, поэтому разные клиенты, получающие доступ к одному и тому же почтовому ящику в разное время, могут обнаружить изменения состояния, внесенные другими клиентами. POP не предоставляет клиентам механизма для хранения такой информации о состоянии на сервере, поэтому, если один пользователь получает доступ к почтовому ящику с помощью двух разных клиентов POP (в разное время), информация о состоянии, например, о том, был ли получен доступ к сообщению, не может быть синхронизирована между клиентами. Протокол IMAP4 поддерживает как предопределенные системные флаги, так и ключевые слова, определяемые клиентом. Системные флаги указывают информацию о состоянии, например, было ли прочитано сообщение. Ключевые слова, которые поддерживаются не всеми серверами IMAP, позволяют присваивать сообщениям один или несколько тегов , значение которых зависит от клиента. Ключевые слова IMAP не следует путать с фирменными метками веб- служб электронной почты, которые иногда транслируются в папки IMAP соответствующими фирменными серверами.
Клиенты IMAP4 могут создавать, переименовывать и удалять почтовые ящики (обычно представленные пользователю как папки) на сервере, а также копировать сообщения между почтовыми ящиками. Поддержка нескольких почтовых ящиков также позволяет серверам предоставлять доступ к общим и публичным папкам. Расширение списка управления доступом (ACL) IMAP4 ( RFC 4314) может использоваться для регулирования прав доступа.
IMAP4 предоставляет механизм, позволяющий клиенту запрашивать у сервера поиск сообщений, соответствующих различным критериям. Этот механизм позволяет избежать необходимости загружать каждое сообщение в почтовом ящике для выполнения этих поисков.
Отражая опыт более ранних интернет-протоколов, IMAP4 определяет явный механизм, с помощью которого он может быть расширен. Было предложено и широко используется множество расширений IMAP4 для базового протокола. IMAP2bis не имел механизма расширения, а POP теперь имеет его, определенный RFC 2449.
IMAP IDLE предоставляет почтовому серверу возможность уведомлять подключенных клиентов об изменениях в почтовом ящике, например, о поступлении новой почты. POP не предоставляет сопоставимой функции, и почтовым клиентам необходимо периодически подключаться к POP-серверу для проверки наличия новой почты.
Хотя IMAP устраняет многие недостатки POP, это по своей сути вносит дополнительную сложность. Большая часть этой сложности (например, несколько клиентов, одновременно получающих доступ к одному и тому же почтовому ящику) компенсируется обходными путями на стороне сервера, такими как Maildir или бэкэнды баз данных.
Спецификацию IMAP критиковали за то, что она недостаточно строга и допускает поведение, которое фактически сводит на нет ее полезность. Например, спецификация утверждает, что каждое сообщение, хранящееся на сервере, имеет «уникальный идентификатор», позволяющий клиентам идентифицировать сообщения, которые они уже видели между сеансами. Однако спецификация также позволяет делать эти UID недействительными практически без ограничений, что фактически сводит на нет их предназначение. [17]
С точки зрения администрирования и ресурсов протокол IMAP можно рассматривать как раннюю реализацию облачных вычислений , поскольку цель и назначение IMAP — поддерживать структуру вашего почтового ящика (контент, структура папок, состояние отдельных сообщений и т. д.) на почтовом сервере, тогда как в случае с POP все это поддерживается на локальном устройстве пользователя. Таким образом, IMAP требует гораздо больше ресурсов на стороне сервера, что приводит к значительно более высокой стоимости за почтовый ящик.
Если алгоритмы хранения, индексации и поиска почты на сервере не будут реализованы должным образом, клиент может потенциально потреблять большие объемы ресурсов сервера при поиске в больших почтовых ящиках.
Клиентам IMAP4 необходимо поддерживать соединение TCP/IP с сервером IMAP, чтобы получать уведомления о прибытии новой почты. Уведомление о прибытии почты осуществляется посредством внутриполосной сигнализации , что несколько усложняет обработку протокола IMAP на стороне клиента. [18] Частное предложение push IMAP расширило бы IMAP для реализации push-email путем отправки всего сообщения вместо одного уведомления. Однако push IMAP не был общепринятым, и текущая работа IETF решает эту проблему другими способами (см. Lemonade Profile для получения дополнительной информации).
В отличие от некоторых фирменных протоколов, которые объединяют операции отправки и извлечения, отправка сообщения и сохранение копии в папке на стороне сервера с помощью клиента IMAP базового уровня требует передачи содержимого сообщения дважды, один раз на SMTP для доставки и второй раз на IMAP для сохранения в папке отправленной почты. Это решается набором расширений, определенных профилем IETF Lemonade для мобильных устройств: URLAUTH ( RFC 4467) и CATENATE ( RFC 4469) в IMAP, и BURL ( RFC 4468) в SMTP-SUBMISSION. В дополнение к этому, Courier Mail Server предлагает нестандартный метод отправки с использованием IMAP путем копирования исходящего сообщения в выделенную папку исходящих сообщений. [19]
Для криптографической защиты соединений IMAP между клиентом и сервером можно использовать IMAPS на порту TCP 993, который использует SSL/TLS. [2] [3] По состоянию на январь 2018 года TLS является рекомендуемым механизмом. [20]
В качестве альтернативы можно использовать STARTTLS для шифрования соединения при подключении к порту 143 после первоначальной связи открытым текстом .
Это пример IMAP-подключения, взятый из раздела 8 RFC 3501:
C: <открыть соединение>S: * OK IMAP4rev1 Service ReadyC: a001 логин mrc секретS: a001 OK ВХОД завершёнC: a002 выберите входящиеС: * 18 СУЩЕСТВУЕТS: * ФЛАГИ (\Отвечено \Помечено \Удалено \Просмотрено \Черновик)С: * 2 ПОСЛЕДНИЕС: * ОК [НЕ ПРОСМОТРЕННОЕ 17] Сообщение 17 — первое невидимое сообщение.S: * OK [UIDVALIDITY 3857529045] UID действительныS: a002 OK [ЧТЕНИЕ-ЗАПИСЬ] ВЫБОР завершенC: a003 получить 12 полныйS: * 12 FETCH (FLAGS (\Seen) INTERNALDATE "17-Jul-1996 02:44:25 -0700" RFC822.SIZE 4286 КОНВЕРТ ("Ср, 17 июля 1996 02:23:25 -0700 (PDT)" «IMAP4rev1 WG mtg summary и протоколы» (("Терри Грей" NIL "gray" "cac.washington.edu")) (("Терри Грей" NIL "gray" "cac.washington.edu")) (("Терри Грей" NIL "gray" "cac.washington.edu")) ((НОЛЬ НИЛ "imap" "cac.washington.edu")) ((НОЛЬ НОЛЬ "минуты" "CNRI.Reston.VA.US") («Джон Кленсин» НОЛЬ «КЛЕНСИН» «MIT.EDU»)) НОЛЬ НОЛЬ «<B27397-0100000@cac.washington.edu>») ТЕЛО ("ТЕКСТ" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 3028 92))S: a003 OK FETCH завершенC: a004 выборка 12 тело[заголовок]S: * 12 ВЫБОРКА (ТЕЛО[ЗАГОЛОВОК] {342}С: С: С: С: С: С: С: С: С:Date: Wed, 17 Jul 1996 02:23:25 -0700 (PDT)
From: Terry Gray <gray@cac.washington.edu>
Subject: IMAP4rev1 WG mtg summary and minutes
To: imap@cac.washington.edu
Cc: minutes@CNRI.Reston.VA.US, John Klensin <KLENSIN@MIT.EDU>
Message-Id: <B27397-0100000@cac.washington.edu>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
С:С: )S: a004 OK FETCH завершенC a005 сохранить 12 +флаги \удаленоS: * 12 FETCH (ФЛАГИ (\Просмотрено \Удалено))S: a005 OK +ФЛАГИ завершеныC: a006 выход из системыS: * BYE IMAP4rev1 сервер завершает соединениеS: a006 OK ВЫХОД ЗАВЕРШЕН
Знание оригинального IMAP (до IMAP2) существует в основном в моем сознании, поскольку все оригинальные спецификации и реализации IMAP были заменены на IMAP2.