IMAP: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
м превращение в прямую ссылку, чтобы было доступно iwrm, replaced: [https://ru.wikipedia.org/w/index.php?title=IMAP&oldid=21271380] → ru:IMAP (2), [[:ru: → [[: (2)
 
(не показано 59 промежуточных версий 44 участников)
Строка 1: Строка 1:
{{много внутренних ссылок|дата=2023-05-17}}
{{Карточка протокола
{{Нарушение авторских прав
| url = http://book.itep.ru/4/44/imap4443.htm
| comment = Вероятно текст добавили в правке [[:IMAP]], которая позже была отменена, но в правке [[:IMAP]] текст был возращён
| date = 2022-10-15
}}{{Карточка протокола
| Аббр = IMAP
| Аббр = IMAP
| Название = Internet Message Access Protocol
| Название = Internet Message Access Protocol
Строка 7: Строка 12:
| Порт = 143/[[TCP]], 993/TCP (IMAP over SSL)
| Порт = 143/[[TCP]], 993/TCP (IMAP over SSL)
| Назначение = Доступ к почтовым ящикам
| Назначение = Доступ к почтовым ящикам
| Спецификация = RFC 3501
| Спецификация = RFC 9051
| Клиенты = [[MUA]] ([[Outlook Express]], [[Opera]], [[Mozilla Thunderbird]], [[The Bat!]], [[Claws Mail]], [[mutt]] и др.)
| Клиенты = [[MUA]] ([[Outlook Express]], [[Opera]], [[Mozilla Thunderbird]], [[The Bat!]], [[Claws Mail]], [[mutt]] и др.)
| Серверы = [http://www.washington.edu/imap/ UW IMAP], [http://www.courier-mta.org/ Courier], [http://cyrusimap.web.cmu.edu/ Cyrus], [[Dovecot]]
| Серверы = [http://www.washington.edu/imap/ UW IMAP], [http://www.courier-mta.org/ Courier], [http://cyrusimap.web.cmu.edu/ Cyrus], [[Dovecot]]
Строка 13: Строка 18:
'''IMAP''' ({{lang-en|Internet Message Access Protocol}}) — [[Сетевой протокол|протокол]] [[Протоколы прикладного уровня|прикладного уровня]] для доступа к [[электронная почта|электронной почте]].
'''IMAP''' ({{lang-en|Internet Message Access Protocol}}) — [[Сетевой протокол|протокол]] [[Протоколы прикладного уровня|прикладного уровня]] для доступа к [[электронная почта|электронной почте]].


Базируется на транспортном протоколе [[Transmission Control Protocol|TCP]] и использует [[Порт (компьютерные сети)|порт]] 143.
Базируется на [[Транспортный протокол|транспортном протоколе]] [[Transmission Control Protocol|TCP]] и использует [[Порт (компьютерные сети)|порт]] 143, а IMAPS (IMAP поверх [[SSL]]) — порт 993. IMAP работает только с [[Сообщение|сообщениями]] и не требует каких-либо [[Пакет (сетевые технологии)|пакетов]]<ref name=":0" /> со специальными заголовками{{sfn|Семенов|2014}}.


IMAP предоставляет пользователю обширные возможности для работы с почтовыми ящиками, находящимися на центральном [[Сервер (программное обеспечение)|сервере]]. [[Почтовая программа]], использующая этот протокол, получает доступ к хранилищу корреспонденции на сервере так, как будто эта корреспонденция расположена на компьютере получателя. Электронными письмами можно манипулировать с компьютера пользователя ([[Клиент (информатика)|клиента]]) без постоянной пересылки с сервера и обратно файлов с полным содержанием писем.
IMAP предоставляет пользователю широкие возможности для работы с [[Электронная почта|почтовыми ящиками]], находящимися на почтовом [[Сервер (программное обеспечение)|сервере]]. [[Почтовая программа]], использующая этот [[Протокол установления сеанса|протокол]], получает доступ к хранилищу [[Корреспонденция|корреспонденции]] на [[Сервер (аппаратное обеспечение)|сервере]] так, как будто эта корреспонденция расположена на [[компьютер]]е получателя. [[Электронное письмо|Электронными письмами]] можно манипулировать с [[компьютер]]а пользователя ([[Клиент (информатика)|клиента]]) без постоянной пересылки с [[Сервер (аппаратное обеспечение)|сервера]] и обратно полного содержания писем.


Для отправки писем используется обычно протокол [[Simple Mail Transfer Protocol|SMTP]], так как собственная команда отправки протокола IMAP, называемая APPEND, считается «неудачной» и «небезопасной».
Для отправки писем используется обычно протокол [[Simple Mail Transfer Protocol|SMTP]], так как собственная команда отправки протокола IMAP, называемая [[Список крылатых латинских выражений|APPEND]], не содержит в себе механизма передачи служебной информации{{sfn|Семенов|2014}}.

Для имён [[Электронная почта|почтовых ящиков]] (папок) с символами вне диапазона [[ASCII]] используется модифицированная версия кодировки [[UTF-7]]{{sfn|Семенов|2014}}.


== Цель разработки протокола IMAP ==
== Цель разработки протокола IMAP ==
Протокол IMAP представляет собой, в основном, альтернативу [[POP3]] с зачаточными способностями по отправке.
Протокол IMAP представляет собой альтернативу [[POP3|POP]] с зачаточными способностями по отправке.


[[POP3]] имеет ряд недостатков, и наиболее серьёзный из них — отсутствие возможностей по управлению перемещением и хранением сообщений на сервере. Сообщения, как правило, загружаются с почтового сервера все сразу, после чего они с сервера удаляются, то есть отсутствует возможность выбирать сообщения для получения.
Первая версия протокола [[Post Office Protocol|POP]] имела ряд недостатков, и наиболее серьёзный из них — отсутствие возможностей по управлению перемещением и хранением сообщений на сервере. В [[Post Office Protocol|POP]] сообщения загружаются с почтового сервера все сразу, после чего они с сервера удаляются, то есть отсутствует возможность выбирать сообщения для получения.


Для решения проблем, связанных с этой особенностью [[POP3]], в [[Вашингтонский университет|Вашингтонском университете]] был разработан новый [[Протокол передачи данных|протокол]], предполагающий возможность получения пользователями электронной почты из одного почтового ящика из различных мест, при этом сообщения не распределяются между точками получения. Пользователю предоставляется возможность управлять сообщениями в его почтовом ящике и дополнительными функциями по обслуживанию почтовых ящиков на сервере.
Для решения проблем, связанных с этой особенностью [[POP3|POP]], в 1986 году {{нп2|Криспин, Марк|Марк Криспин|en|Mark Crispin}}, работавший тогда в [[Стэнфордский университет|Стэнфордском университете]], создал новый [[Протокол передачи данных|протокол]] получения почты с [[Сервер (аппаратное обеспечение)|сервера]]{{sfn|University of Washington}}.


Новый протокол предоставил пользователям возможность получения электронной почты в различных местах из одного почтового ящика. Пользователю предоставляется возможность управлять сообщениями в своём почтовом ящике и дополнительные функции по обслуживанию почтовых ящиков на сервере.
=== Версии протокола IMAP ===

* Original IMAP ([[1986]], спецификация отсутствует)
В дальнейшем протокол [[POP3|POP]] был доработан, в [[POP3]] (POP версии 3) есть возможность получать с сервера избранные сообщения и оставлять избранные сообщения на сервере. В последних версиях между IMAP и [[POP3|POP]] основное различие для пользователя — IMAP4 может обращаться к письмам в разных почтовых папках на сервере и перемещать письма между ними, а [[POP3]] обращается к письмам на сервере по номерам в линейном списке (то есть работает только с одной почтовой папкой).
* IMAP2 ([[1988]] — RFC 1064, 1990 — RFC 1176)

* IMAP3 ([[1991]], RFC 1203)
; Версии протокола IMAP{{sfn|University of Washington}}
* IMAP2bis (спецификация существует только в черновом варианте [[1993]] года)
* IMAP: в [[1986]] реализован на [[DEC]], спецификация отсутствует
* IMAP4 (переименованный IMAP2bis)
* IMAP2: реализован в [[1987]], описан в [[1988]] в RFC 1064, доработан в 1990 (RFC 1176)
* IMAP4rev1 ([[2001]] - RFC 2822, [[2003]] - RFC 3501)
* IMAP3: [[1991]] RFC 1203
* IMAP2bis, спецификация существует только в черновом варианте [[1993 год]]а, плюс в RFC 2061 ([[1996]]) описаны различия между IMAP4 и IMAP2bis
* IMAP4: [[1994]] RFC 1730
* IMAP4rev1: 1996 RFC 2060, [[2003]] RFC 3501


== Преимущества по сравнению с POP3 ==
== Преимущества по сравнению с POP3 ==
При использовании POP3 клиент подключается к серверу только на промежуток времени, необходимый для загрузки новых сообщений. При использовании IMAP соединение не разрывается, пока пользовательский интерфейс активен, а сообщения загружаются только по требованию клиента. Это позволяет уменьшить время отклика для пользователей, в чьих ящиках имеется много сообщений большого объёма.
При использовании [[POP3]] клиент подключается к серверу только на промежуток времени, необходимый для загрузки новых сообщений. При использовании IMAP соединение не разрывается, пока пользовательский [[интерфейс]] активен, а сообщения загружаются только по требованию клиента. Это позволяет уменьшить [[время отклика]] для пользователей, в чьих ящиках имеется много сообщений большого объёма.


Протокол POP требует, чтобы текущий клиент был единственным подключенным к ящику. IMAP позволяет одновременный доступ нескольких клиентов к ящику и предоставляет клиенту возможность отслеживать изменения, вносимые другими клиентами, подключенными одновременно с ним.
Протокол [[POP3|POP]] требует, чтобы текущий клиент был единственным подключённым к ящику. IMAP допускает одновременный доступ нескольких клиентов к ящику и предоставляет клиенту возможность отслеживать изменения, вносимые другими клиентами, подключёнными одновременно с ним.


Благодаря системе флагов, определенной в IMAP4, клиент может отслеживать состояние сообщения (прочитано, отправлен ответ, удалено и т. д.); данные о флагах хранятся на сервере.
Благодаря системе флагов, определённой в IMAP4, клиент может отслеживать состояние сообщения (прочитано, отправлен ответ, удалено и т. д.); данные о флагах хранятся на сервере.


Клиенты IMAP4 могут создавать, переименовывать и удалять ящики и перемещать сообщения между ящиками. Кроме того, можно использовать расширение IMAP4 Access Control List (ACL) Extension (RFC 4314) для управления правами доступа к ящикам.
Клиенты IMAP4 могут создавать, переименовывать и удалять ящики и перемещать сообщения между ящиками. Кроме того, можно использовать расширение «IMAP4 Access Control List ([[Access Control List|ACL]]) Extension» (RFC 4314) для управления правами доступа к ящикам.


Поиск сообщений происходит на стороне сервера.
Поиск сообщений происходит на стороне сервера.


IMAP4 имеет явный механизм расширения.<ref name=":0">{{Cite web|lang=ru-RU|url=https://support.microsoft.com/ru-ru/office/в-чем-разница-между-pop-и-imap-85c0e47f-931d-4035-b409-af3318b194a8|title=В чем разница между POP и IMAP?|website=support.microsoft.com|access-date=2021-07-19|archive-date=2021-07-19|archive-url=https://web.archive.org/web/20210719083242/https://support.microsoft.com/ru-ru/office/%D0%B2-%D1%87%D0%B5%D0%BC-%D1%80%D0%B0%D0%B7%D0%BD%D0%B8%D1%86%D0%B0-%D0%BC%D0%B5%D0%B6%D0%B4%D1%83-pop-%D0%B8-imap-85c0e47f-931d-4035-b409-af3318b194a8|deadlink=no}}</ref>
IMAP4 имеет явный механизм расширения.


== Сообщения и их атрибуты ==
== Сообщения и их атрибуты ==
IMAP работает только с сообщениями и не требует каких-либо пакетов со специальными заголовками.
IMAP работает только с сообщениями и не требует каких-либо пакетов со специальными заголовками.

Каждое сообщение имеет несколько связанных с ним атрибутов. Эти атрибуты могут быть определены индивидуально или совместно с другими атрибутами.
Каждое сообщение имеет несколько связанных с ним атрибутов. Эти атрибуты могут быть определены индивидуально или совместно с другими атрибутами.

=== UID ===
=== UID ===
Каждому сообщению ставится в соответствие 32-битный код, который при использовании совместно с уникальным идентификатором образует 64-битовую последовательность, гарантирующую однозначную идентификацию сообщения в почтовом ящике. Чем позже сообщение пришло, тем больше его UID.


Каждому сообщению ставится в соответствие [[32 бита|32-битный код]], который при использовании совместно с уникальным идентификатором образует [[64 бита|64-битовую]] последовательность, гарантирующую однозначную идентификацию сообщения в почтовом ящике. Чем позже сообщение пришло, тем больше его UID.
UID ассоциируется с почтовым ящиком и посылается в виде кода uidvalidity отклика (ok) на фазе выбора почтового ящика. Если UID из предыдущей сессии по какой-то причине не может быть использован, UID должен быть инкрементирован.

UID ассоциируется с почтовым ящиком и посылается в виде кода uidvalidity отклика (ok) на фазе выбора почтового ящика. Если UID из предыдущей [[Сессия (веб-аналитика)|сессии]] по какой-то причине не может быть использован, UID должен быть инкрементирован.


UID сообщения не должно изменяться в пределах сессии, его не следует изменять и от сессии к сессии. Однако если невозможно сохранить UID сообщения в последующей сессии, каждая следующая сессия должна иметь новый уникальный код идентификатора, который должен быть больше, чем любой UID, использованный ранее.
UID сообщения не должно изменяться в пределах сессии, его не следует изменять и от сессии к сессии. Однако если невозможно сохранить UID сообщения в последующей сессии, каждая следующая сессия должна иметь новый уникальный код идентификатора, который должен быть больше, чем любой UID, использованный ранее.
Строка 60: Строка 72:
=== Порядковый номер сообщения ===
=== Порядковый номер сообщения ===
Порядковый номер сообщения в почтовом ящике начинается с 1. Каждое сообщение, начиная со второго, имеет порядковый номер ровно на 1 больше, чем предшествующее ему.
Порядковый номер сообщения в почтовом ящике начинается с 1. Каждое сообщение, начиная со второго, имеет порядковый номер ровно на 1 больше, чем предшествующее ему.

В течение сессии допустимо изменение порядкового номера сообщения. Например, когда сообщение удаляется из почтового ящика, номера всех последующих сообщений изменяются.
В течение сессии допустимо изменение порядкового номера сообщения. Например, когда сообщение удаляется из почтового ящика, номера всех последующих сообщений изменяются.


=== Флаги сообщения ===
=== Флаги сообщения ===
Этот атрибут представляет собой список из нуля или более именованных лексем, соотнесённых с данным сообщением. Флаг устанавливается путём его добавления к этому списку и обнуляется путём его удаления. В IMAP 4.1 существует два типа флагов. Флаг может быть постоянным или действующим только на время данной сессии.
Этот атрибут представляет собой список из нуля или более именованных [[Лексема (информатика)|лексем]], соотнесённых с данным сообщением. Флаг устанавливается путём его добавления к этому списку и обнуляется путём его удаления. В IMAP 4.1 существует два типа флагов. Флаг может быть постоянным или действующим только на время данной сессии.


Системным флагом является флаг, имя которого определено в спецификации протокола. Все системные флаги начинаются с символа <code>\</code>.
Системным флагом является флаг, имя которого определено в спецификации протокола. Все системные флаги начинаются с символа <code>\</code>.
Строка 72: Строка 84:
* <code>\answered</code> — на сообщение отправлен ответ
* <code>\answered</code> — на сообщение отправлен ответ
* <code>\flagged</code> — сообщение отмечено как «важное»
* <code>\flagged</code> — сообщение отмечено как «важное»
* <code>\deleted</code> — сообщение отмечено как удаленное
* <code>\deleted</code> — сообщение отмечено как удалённое
* <code>\draft</code> — сообщение отмечено как черновик
* <code>\draft</code> — сообщение отмечено как черновик
* <code>\recent</code> — недавнее сообщение (впервые появилось в ящике в ходе текущей сессии)
* <code>\recent</code> — недавнее сообщение (впервые появилось в ящике в ходе текущей сессии)


=== Внутренние дата и время сообщения на сервере ===
=== Внутренние дата и время сообщения на сервере ===
Время и дата получения сообщения. В случае доставки сообщения посредством протокола SMTP — дата и время доставки конечному адресату. Для сообщений, доставленных командой копирования — внутренняя дата и время отправителя сообщения. При использовании команды <code>append</code> — дата и время, заданные параметрами команды.
Время и дата получения сообщения. В случае доставки сообщения посредством протокола [[SMTP]] — дата и время доставки конечному адресату. Для сообщений, доставленных командой копирования — внутренняя дата и время отправителя сообщения. При использовании команды <code>append</code> — дата и время, заданные параметрами команды.


=== Прочие атрибуты ===
=== Прочие атрибуты ===
* размер сообщения — число октетов в сообщении.
* размер сообщения — число [[Октет (информатика)|октетов]] в сообщении.
* структура конверта сообщения.
* структура конверта сообщения.
* структура тела сообщения
* структура тела сообщения


== Взаимодействие клиента и сервера ==
== Взаимодействие клиента и сервера ==
Соединение IMAP 4.1 подразумевает установление связи между клиентом и сервером. Клиент посылает серверу команды, сервер клиенту — данные и уведомления о статусе выполнения запроса. Все сообщения, как клиента, так и сервера имеют форму строк, завершающихся специальной последовательностью.
Соединение IMAP 4.1 подразумевает установление связи между [[Клиент (информатика)|клиентом]] и [[Сервер (программное обеспечение)|сервером]]. Клиент посылает серверу команды, сервер клиенту — данные и уведомления о статусе выполнения запроса. Все сообщения, как клиента, так и сервера, имеют форму строк, завершающихся специальной последовательностью.


Любая процедура начинается с команды клиента. Любая команда клиента начинается с префикса-идентификатора (обычно короткая буквенно-цифровая строка, например, <code>A0001</code>, <code>A0002</code> и т. д.), называемого меткой (tag). Для каждой команды клиент генерирует свою метку.
Любая процедура начинается с команды клиента. Любая команда клиента начинается с префикса-идентификатора (обычно короткая буквенно-цифровая строка, например, <code>A0001</code>, <code>A0002</code> и т. д.), называемого меткой (tag). Для каждой команды клиент генерирует свою метку.


Возможны два случая, когда строка, отправленная клиентом, не представляет собой законченную команду. В первом — аргумент команды снабжается кодом, определяющим число октетов в строке. Во втором — аргументы команды требуют отклика со стороны сервера. В обоих случаях сервер посылает запрос продолжения команды, начинающийся с символа <code>+</code>.
Возможны два случая, когда строка, отправленная клиентом, не представляет собой законченную команду. В первом — аргумент команды снабжается кодом, определяющим число [[Октет (информатика)|октетов]] в строке. Во втором — аргументы команды требуют отклика со стороны сервера. В обоих случаях сервер посылает запрос продолжения команды, начинающийся с символа <code>+</code>.


Клиент должен завершить отправку одной команды, прежде чем отправить другую.
Клиент должен завершить отправку одной команды, прежде чем отправить другую.


Протокольный приемник сервера читает строку команды, пришедшей от клиента, осуществляет её разбор, выделяет параметры и передает серверу данные. По завершении команды сервер посылает отклик.
Протокольный приемник сервера читает строку команды, пришедшей от клиента, осуществляет её разбор, выделяет параметры и передаёт серверу данные. По завершении команды сервер посылает отклик.


Данные, передаваемые сервером клиенту, а также статусные отклики, которые не указывают на завершение выполнения команды, имеют префикс <code>*</code> и называются непомеченными откликами.
Данные, передаваемые сервером клиенту, а также статусные отклики, которые не указывают на завершение выполнения команды, имеют [[Префиксный код|префикс]] <code>*</code> и называются непомеченными откликами.


Данные могут быть отправлены сервером в ответ на команду клиента или по собственной инициативе. Формат данных не зависит от причины отправки.
Данные могут быть отправлены сервером в ответ на команду клиента или по собственной инициативе. Формат данных не зависит от причины отправки.


Отклик указывает на удачное/неудачное выполнение операции. Он использует ту же метку, что и команда клиента, запустившая процедуру. Таким образом, если осуществляется более чем одна команда, метка сервера указывает на команду, вызвавшую данный отклик. Имеется три вида отклика завершения сервера: <code>ok</code> (успешное выполнение), <code>no</code> (неудача), <code>bad</code> (протокольная ошибка, например, не узнана команда или зафиксирована синтаксическая ошибка).
Отклик указывает на удачное/неудачное выполнение операции. Он использует ту же метку, что и команда клиента, запустившая процедуру. Таким образом, если осуществляется более, чем одна команда, метка сервера указывает на команду, вызвавшую данный отклик. Имеется три вида отклика завершения сервера: <code>ok</code> (успешное выполнение), <code>no</code> (неудача), <code>bad</code> (протокольная ошибка, например, не узнана команда или зафиксирована синтаксическая ошибка).


Протокольный приемник клиента IMAP 4.1 читает строку отклика от сервера и предпринимает действия в соответствии с первым символом <code>*</code> или <code>+</code>.
Протокольный приемник клиента IMAP 4.1 читает строку отклика от сервера и предпринимает действия в соответствии с первым символом <code>*</code> или <code>+</code>.
Строка 108: Строка 120:
Сервер IMAP 4.1 находится в одном из четырёх состояний.
Сервер IMAP 4.1 находится в одном из четырёх состояний.


Большинство команд можно использовать только в определенных состояниях.
Большинство команд можно использовать только в определённых состояниях.


В состоянии ''без аутентификации'' клиент должен предоставить имя и пароль, прежде чем ему станет доступно большинство команд. Переход в это состояние производится при установлении соединения без предварительной аутентификации.
В состоянии ''без [[Аутентификация|аутентификации]]'' клиент должен предоставить имя и пароль, прежде чем ему станет доступно большинство команд. Переход в это состояние производится при установлении соединения без предварительной аутентификации.


В состоянии ''аутентификации'' клиент идентифицирован и должен выбрать почтовый ящик, после чего ему станут доступны команды для работы с сообщениями. Переход в это состояние происходит при установлении соединение с предварительной аутентификацией, когда выданы все необходимые идентификационные данные или при ошибочном выборе почтового ящика.
В состоянии ''[[Аутентификация|аутентификации]]'' клиент идентифицирован и должен выбрать почтовый ящик, после чего ему станут доступны команды для работы с сообщениями. Переход в это состояние происходит при установлении соединения с предварительной [[Аутентификация|аутентификацией]], когда выданы все необходимые идентификационные данные или при ошибочном выборе почтового ящика.


В состояние ''выбора'' система попадает, когда успешно осуществлен выбор почтового ящика.
В состояние ''выбора'' система попадает, когда успешно осуществлен выбор почтового ящика.
Строка 126: Строка 138:
# Успешное завершение команды <code>SELECT</code> или <code>EXAMINE</code>
# Успешное завершение команды <code>SELECT</code> или <code>EXAMINE</code>
# Выполнение команды <code>CLOSE</code> или неудачная команда <code>SELECT</code> или <code>EXAMINE</code>
# Выполнение команды <code>CLOSE</code> или неудачная команда <code>SELECT</code> или <code>EXAMINE</code>
# Выполнение команды <code>LOGOUT</code>, закрытие сервера, или прерывание соединения
# Выполнение команды <code>LOGOUT</code>, закрытие сервера или прерывание соединения


== Команды протокола IMAP ==
== Команды протокола IMAP ==
Строка 141: Строка 153:
; DELETE : Применяется к почтовым ящикам. Сервер IMAP при получении этой команды попытается удалить почтовый ящик с именем, указанным в качестве аргумента команды. Сообщения удаляются вместе с ящиками и восстановлению не подлежат.
; DELETE : Применяется к почтовым ящикам. Сервер IMAP при получении этой команды попытается удалить почтовый ящик с именем, указанным в качестве аргумента команды. Сообщения удаляются вместе с ящиками и восстановлению не подлежат.


; RENAME : Изменяет имя почтового ящика. Эта команда имеет два параметра — имя почтового ящика, который требуется переименовать, и новое имя почтового ящика.
; RENAME : Изменяет имя [[Электронная почта|почтового ящика]]. Эта команда имеет два параметра — имя почтового ящика, который требуется переименовать, и новое имя почтового ящика.


; SUBSCRIBE : Добавляет почтовый ящик в список активных ящиков клиента. В этой команде используется только один параметр — имя почтового ящика, который нужно внести в список. Почтовый ящик не обязательно должен существовать, чтобы его можно было добавить в список активных ящиков — это позволяет добавлять в список активных ящиков ящики, которые ещё не созданы, или удалять их, если они пусты.
; SUBSCRIBE : Добавляет почтовый ящик в список активных ящиков клиента. В этой команде используется только один параметр — имя почтового ящика, который нужно внести в список. Почтовый ящик не обязательно должен существовать, чтобы его можно было добавить в список активных ящиков — это позволяет добавлять в список активных ящиков ящики, которые ещё не созданы, или удалять их, если они пусты.


; UNSUBSCRIBE : Удаляет почтовые ящики из списка активных. В ней так же используется один параметр — имя почтового ящика, который удаляется из списка активных ящиков клиента. При этом сам по себе почтовый ящик не удаляется.
; UNSUBSCRIBE : Удаляет почтовые ящики из списка активных. В ней так же используется один параметр — имя почтового ящика, который удаляется из списка активных ящиков [[Клиент — сервер|клиента]]. При этом сам по себе почтовый ящик не удаляется.


; LIST : Получить список всех почтовых ящиков клиента; имеет два параметра.
; LIST : Получить список всех почтовых ящиков клиента; имеет два параметра.
Строка 163: Строка 175:


: Имеются следующие флаги сообщений:
: Имеются следующие флаги сообщений:

:* <code>\Seen</code> — прочитано
:* <code>\Seen</code> — прочитано
:* <code>\Answered</code> — написан ответ
:* <code>\Answered</code> — написан ответ
Строка 175: Строка 186:
: Если в команде задана метка времени, то это время будет установлено в качестве времени создания сообщения, в противном случае за время создания принимается текущее время.
: Если в команде задана метка времени, то это время будет установлено в качестве времени создания сообщения, в противном случае за время создания принимается текущее время.


: Поскольку сообщение состоит не из одной строки, используются литералы.
: Поскольку сообщение состоит не из одной строки, используются [[Литерал (информатика)|литералы]].


: Пример:
: Пример:
Строка 186: Строка 197:
C Message-Id: <[email protected]>
C Message-Id: <[email protected]>
C
C
C Hello Joe, do you think we can meet at 3:30 tomorrow?
C Hello Joe, do you think we can meet at 3:30 tomorrow?
S A003 OK APPEND completed
S A003 OK APPEND completed
Строка 192: Строка 203:
: Расширение <code>MULTIAPPEND</code>, описанное в RFC 3502, позволяет одной командой добавлять в почтовый ящик несколько сообщений.
: Расширение <code>MULTIAPPEND</code>, описанное в RFC 3502, позволяет одной командой добавлять в почтовый ящик несколько сообщений.


; CHECK : Устанавливает контрольную точку в почтовом ящике. Любые операции, такие, например, как запись данных из памяти сервера на его жёсткий диск, должны выполняться при соответствующем состоянии почтового ящика. Именно для проверки целостности почтового ящика после дисковых и других подобных им операций и применяется команда <code>CHECK</code>. Эта команда используется без параметров.
; CHECK : Устанавливает контрольную точку в почтовом ящике. Любые операции, такие, например, как запись данных из памяти сервера на его [[жёсткий диск]], должны выполняться при соответствующем состоянии почтового ящика. Именно для проверки целостности почтового ящика после дисковых и других подобных им операций и применяется команда <code>CHECK</code>. Эта команда используется без параметров.


; EXPUNGE : Удаляет из почтового ящика все сообщения, помеченные флагом <code>\DELETED</code>, при этом почтовый ящик не закрывается. Ответ сервера на команду <code>EXPUNGE</code> представляет собой отчёт о новом состоянии почтового ящика.
; EXPUNGE : Удаляет из почтового ящика все сообщения, помеченные флагом <code>\DELETED</code>, при этом почтовый ящик не закрывается. Ответ сервера на команду <code>EXPUNGE</code> представляет собой отчёт о новом состоянии почтового ящика.

; SEARCH : Поиск сообщений по критериям в активном почтовом ящике с последующим отображением результатов в виде номера сообщения.
; SEARCH : Поиск сообщений по критериям в активном почтовом ящике с последующим отображением результатов в виде номера сообщения.


: Возможен поиск сообщений, в теле которых имеется определённая текстовая строка, или имеющих определённый флаг, или полученных до определённой даты и т. д.
: Возможен поиск сообщений, в теле которых имеется определённая текстовая строка, или имеющих определённый флаг, или полученных до определённой даты и т. д.


; FETCH : Получить текст почтового сообщения. Команда применяется только для отображения сообщений. В отличие от POP3, клиент IMAP не сохраняет копию сообщения на клиентском ПК.
; FETCH : Получить текст почтового сообщения. Команда применяется только для отображения сообщений. В отличие от [[POP3]], клиент IMAP не сохраняет копию сообщения на клиентском [[Персональный компьютер|ПК]].


; STORE : Изменяет информацию о сообщении.
; STORE : Изменяет информацию о сообщении.


; COPY : Копирует сообщения из одного почтового ящика в другой.
; COPY : Копирует сообщения из одного [[Электронная почта|почтового ящика]] в другой.


; UID : Используется в связке с командами <code>FETCH</code>, <code>COPY</code>, <code>STORE</code> или <code>SEARCH</code>. С её помощью в этих командах можно использовать реальные идентификационные номера UID вместо последовательности чисел из диапазона номеров сообщений.
; UID : Используется в связке с командами <code>FETCH</code>, <code>COPY</code>, <code>STORE</code> или <code>SEARCH</code>. С её помощью в этих командах можно использовать реальные идентификационные номера UID вместо последовательности чисел из диапазона номеров сообщений.
Строка 211: Строка 222:


; NOOP : Команда ничего не делает. Она может применяться для поддержки активности во время сеанса для того, чтобы сеанс не прекратился по таймеру интервала ожидания. Ответ сервера на команду <code>NOOP</code> всегда должен быть положительным. Так как сервер часто в ответе возвращает состояние выполнения той или иной команды, то <code>NOOP</code> вполне можно использовать как триггер для периодического запроса о состоянии сервера.
; NOOP : Команда ничего не делает. Она может применяться для поддержки активности во время сеанса для того, чтобы сеанс не прекратился по таймеру интервала ожидания. Ответ сервера на команду <code>NOOP</code> всегда должен быть положительным. Так как сервер часто в ответе возвращает состояние выполнения той или иной команды, то <code>NOOP</code> вполне можно использовать как триггер для периодического запроса о состоянии сервера.

== Литература ==
* {{публикация|книга |автор= Hughes |автор имя=L |заглавие=Internet e-mail Protocols, Standards and Implementation |издательство=Artech House Publishers |год=1998 | isbn=0-89006-939-5}}
* {{публикация|книга |автор= Johnson |автор имя=K |заглавие=Internet Email Protocols: A Developer's Guide |издательство=Addison-Wesley Professional |год=2000 | isbn=0-201-43288-9}}
* {{публикация|книга |автор= Loshin |автор имя=P |заглавие=Essential Email Standards: RFCs and Protocols Made Practical |издательство=John Wiley & Sons |год=1999 | isbn=0-471-34597-0}}
* {{публикация|книга |автор= Rhoton |автор имя=J |заглавие=Programmer's Guide to Internet Mail: SMTP, POP, IMAP, and LDAP |издательство=Elsevier |год=1999 | isbn=1-55558-212-5}}
* {{публикация|книга |автор= Wood |автор имя=David |заглавие=Programming Internet Email |подзаголовок=Mastering Internet Messaging Systems |издательство=O'Reilly |год=1999 |allpages=380 | isbn=1-56592-479-7 |ссылка=https://books.google.ru/books?id=j3rPCgAAQBAJ}}


== Ссылки ==
== Ссылки ==
* RFC 3501 — Internet Message Access Protocol v4rev1 {{ref-en}}
* RFC 3501 — Internet Message Access Protocol v4rev1{{ref-en}}
* {{cite web
* [https://web.archive.org/web/20100402063107/http://imap.org/ The IMAP Connection]{{ref-en}}
|url = http://www.imap.org/about/history.status.html
|title = IMAP Status and History
|website = The IMAP Connection
|publisher = University of Washington
|accessdate = 2019-04-01
|lang = en
|deadlink = yes
|archiveurl = https://web.archive.org/web/20091021182625/http://imap.org/about/history.status.html
|archivedate= 2009-10-21
|ref=University of Washington
}}
* [http://www.linewbie.com/2007/11/howto-configuring-kmail-with-gmail-imap-and-disconnected-imap.html Howto: Configuring KMail with Gmail — IMAP and Disconnected IMAP]{{ref-en}}
* [http://www.linewbie.com/2007/11/howto-configuring-kmail-with-gmail-imap-and-disconnected-imap.html Howto: Configuring KMail with Gmail — IMAP and Disconnected IMAP]{{ref-en}}
* {{публикация|книга|автор=Семенов|автор имя=Ю.А.|автор линк=Семенов|заглавие=Телекоммуникационные технологии|часть=4.4.14.3 Протокол Интернет для работы с сообщениями IMAP|часть ссылка=http://book.itep.ru/4/44/imap4443.htm|часть архив=|часть архив дата=|вид=эл. изд.|издание=v5.1|издательство=ИТЭФ|издательство ссылка=http://www.itep.ru|место=М.|год=2014|месяц=06|день=15|ref=Семенов}}
* http://citforum.ru/nets/semenov/4/44/imap4443.shtml


== Примечания ==
{{викифицировать}}
{{примечания}}
{{URI scheme}}
{{URI scheme}}
{{IPstack|nocat=1}}
{{IPstack|nocat=1}}

Текущая версия от 15:22, 12 сентября 2024

IMAP
Название Internet Message Access Protocol
Уровень (по модели OSI) Прикладной
Семейство TCP/IP, E-Mail
Создан в 1986
Порт/ID 143/TCP, 993/TCP (IMAP over SSL)
Назначение протокола Доступ к почтовым ящикам
Спецификация RFC 9051
Основные реализации (клиенты) MUA (Outlook Express, Opera, Mozilla Thunderbird, The Bat!, Claws Mail, mutt и др.)
Основные реализации (серверы) UW IMAP, Courier, Cyrus, Dovecot

IMAP (англ. Internet Message Access Protocol) — протокол прикладного уровня для доступа к электронной почте.

Базируется на транспортном протоколе TCP и использует порт 143, а IMAPS (IMAP поверх SSL) — порт 993. IMAP работает только с сообщениями и не требует каких-либо пакетов[1] со специальными заголовками[2].

IMAP предоставляет пользователю широкие возможности для работы с почтовыми ящиками, находящимися на почтовом сервере. Почтовая программа, использующая этот протокол, получает доступ к хранилищу корреспонденции на сервере так, как будто эта корреспонденция расположена на компьютере получателя. Электронными письмами можно манипулировать с компьютера пользователя (клиента) без постоянной пересылки с сервера и обратно полного содержания писем.

Для отправки писем используется обычно протокол SMTP, так как собственная команда отправки протокола IMAP, называемая APPEND, не содержит в себе механизма передачи служебной информации[2].

Для имён почтовых ящиков (папок) с символами вне диапазона ASCII используется модифицированная версия кодировки UTF-7[2].

Цель разработки протокола IMAP

[править | править код]

Протокол IMAP представляет собой альтернативу POP с зачаточными способностями по отправке.

Первая версия протокола POP имела ряд недостатков, и наиболее серьёзный из них — отсутствие возможностей по управлению перемещением и хранением сообщений на сервере. В POP сообщения загружаются с почтового сервера все сразу, после чего они с сервера удаляются, то есть отсутствует возможность выбирать сообщения для получения.

Для решения проблем, связанных с этой особенностью POP, в 1986 году Марк Криспин (англ. Mark Crispin), работавший тогда в Стэнфордском университете, создал новый протокол получения почты с сервера[3].

Новый протокол предоставил пользователям возможность получения электронной почты в различных местах из одного почтового ящика. Пользователю предоставляется возможность управлять сообщениями в своём почтовом ящике и дополнительные функции по обслуживанию почтовых ящиков на сервере.

В дальнейшем протокол POP был доработан, в POP3 (POP версии 3) есть возможность получать с сервера избранные сообщения и оставлять избранные сообщения на сервере. В последних версиях между IMAP и POP основное различие для пользователя — IMAP4 может обращаться к письмам в разных почтовых папках на сервере и перемещать письма между ними, а POP3 обращается к письмам на сервере по номерам в линейном списке (то есть работает только с одной почтовой папкой).

Версии протокола IMAP[3]

Преимущества по сравнению с POP3

[править | править код]

При использовании POP3 клиент подключается к серверу только на промежуток времени, необходимый для загрузки новых сообщений. При использовании IMAP соединение не разрывается, пока пользовательский интерфейс активен, а сообщения загружаются только по требованию клиента. Это позволяет уменьшить время отклика для пользователей, в чьих ящиках имеется много сообщений большого объёма.

Протокол POP требует, чтобы текущий клиент был единственным подключённым к ящику. IMAP допускает одновременный доступ нескольких клиентов к ящику и предоставляет клиенту возможность отслеживать изменения, вносимые другими клиентами, подключёнными одновременно с ним.

Благодаря системе флагов, определённой в IMAP4, клиент может отслеживать состояние сообщения (прочитано, отправлен ответ, удалено и т. д.); данные о флагах хранятся на сервере.

Клиенты IMAP4 могут создавать, переименовывать и удалять ящики и перемещать сообщения между ящиками. Кроме того, можно использовать расширение «IMAP4 Access Control List (ACL) Extension» (RFC 4314) для управления правами доступа к ящикам.

Поиск сообщений происходит на стороне сервера.

IMAP4 имеет явный механизм расширения.[1]

Сообщения и их атрибуты

[править | править код]

IMAP работает только с сообщениями и не требует каких-либо пакетов со специальными заголовками. Каждое сообщение имеет несколько связанных с ним атрибутов. Эти атрибуты могут быть определены индивидуально или совместно с другими атрибутами.

Каждому сообщению ставится в соответствие 32-битный код, который при использовании совместно с уникальным идентификатором образует 64-битовую последовательность, гарантирующую однозначную идентификацию сообщения в почтовом ящике. Чем позже сообщение пришло, тем больше его UID.

UID ассоциируется с почтовым ящиком и посылается в виде кода uidvalidity отклика (ok) на фазе выбора почтового ящика. Если UID из предыдущей сессии по какой-то причине не может быть использован, UID должен быть инкрементирован.

UID сообщения не должно изменяться в пределах сессии, его не следует изменять и от сессии к сессии. Однако если невозможно сохранить UID сообщения в последующей сессии, каждая следующая сессия должна иметь новый уникальный код идентификатора, который должен быть больше, чем любой UID, использованный ранее.

Порядковый номер сообщения

[править | править код]

Порядковый номер сообщения в почтовом ящике начинается с 1. Каждое сообщение, начиная со второго, имеет порядковый номер ровно на 1 больше, чем предшествующее ему.

В течение сессии допустимо изменение порядкового номера сообщения. Например, когда сообщение удаляется из почтового ящика, номера всех последующих сообщений изменяются.

Флаги сообщения

[править | править код]

Этот атрибут представляет собой список из нуля или более именованных лексем, соотнесённых с данным сообщением. Флаг устанавливается путём его добавления к этому списку и обнуляется путём его удаления. В IMAP 4.1 существует два типа флагов. Флаг может быть постоянным или действующим только на время данной сессии.

Системным флагом является флаг, имя которого определено в спецификации протокола. Все системные флаги начинаются с символа \.

В настоящее время определены следующие системные флаги:

  • \seen — сообщение прочитано
  • \answered — на сообщение отправлен ответ
  • \flagged — сообщение отмечено как «важное»
  • \deleted — сообщение отмечено как удалённое
  • \draft — сообщение отмечено как черновик
  • \recent — недавнее сообщение (впервые появилось в ящике в ходе текущей сессии)

Внутренние дата и время сообщения на сервере

[править | править код]

Время и дата получения сообщения. В случае доставки сообщения посредством протокола SMTP — дата и время доставки конечному адресату. Для сообщений, доставленных командой копирования — внутренняя дата и время отправителя сообщения. При использовании команды append — дата и время, заданные параметрами команды.

Прочие атрибуты

[править | править код]
  • размер сообщения — число октетов в сообщении.
  • структура конверта сообщения.
  • структура тела сообщения

Взаимодействие клиента и сервера

[править | править код]

Соединение IMAP 4.1 подразумевает установление связи между клиентом и сервером. Клиент посылает серверу команды, сервер клиенту — данные и уведомления о статусе выполнения запроса. Все сообщения, как клиента, так и сервера, имеют форму строк, завершающихся специальной последовательностью.

Любая процедура начинается с команды клиента. Любая команда клиента начинается с префикса-идентификатора (обычно короткая буквенно-цифровая строка, например, A0001, A0002 и т. д.), называемого меткой (tag). Для каждой команды клиент генерирует свою метку.

Возможны два случая, когда строка, отправленная клиентом, не представляет собой законченную команду. В первом — аргумент команды снабжается кодом, определяющим число октетов в строке. Во втором — аргументы команды требуют отклика со стороны сервера. В обоих случаях сервер посылает запрос продолжения команды, начинающийся с символа +.

Клиент должен завершить отправку одной команды, прежде чем отправить другую.

Протокольный приемник сервера читает строку команды, пришедшей от клиента, осуществляет её разбор, выделяет параметры и передаёт серверу данные. По завершении команды сервер посылает отклик.

Данные, передаваемые сервером клиенту, а также статусные отклики, которые не указывают на завершение выполнения команды, имеют префикс * и называются непомеченными откликами.

Данные могут быть отправлены сервером в ответ на команду клиента или по собственной инициативе. Формат данных не зависит от причины отправки.

Отклик указывает на удачное/неудачное выполнение операции. Он использует ту же метку, что и команда клиента, запустившая процедуру. Таким образом, если осуществляется более, чем одна команда, метка сервера указывает на команду, вызвавшую данный отклик. Имеется три вида отклика завершения сервера: ok (успешное выполнение), no (неудача), bad (протокольная ошибка, например, не узнана команда или зафиксирована синтаксическая ошибка).

Протокольный приемник клиента IMAP 4.1 читает строку отклика от сервера и предпринимает действия в соответствии с первым символом * или +.

Клиент должен быть готов принять любой отклик сервера в любое время. Данные сервера должны быть записаны так, чтобы клиент мог их непосредственно использовать, не посылая серверу уточняющих запросов.

Состояния сервера IMAP

[править | править код]

Сервер IMAP 4.1 находится в одном из четырёх состояний.

Большинство команд можно использовать только в определённых состояниях.

В состоянии без аутентификации клиент должен предоставить имя и пароль, прежде чем ему станет доступно большинство команд. Переход в это состояние производится при установлении соединения без предварительной аутентификации.

В состоянии аутентификации клиент идентифицирован и должен выбрать почтовый ящик, после чего ему станут доступны команды для работы с сообщениями. Переход в это состояние происходит при установлении соединения с предварительной аутентификацией, когда выданы все необходимые идентификационные данные или при ошибочном выборе почтового ящика.

В состояние выбора система попадает, когда успешно осуществлен выбор почтового ящика.

В состояние выхода система попадает при прерывании соединения в результате запроса клиента или вследствие независимого решения сервера.

  1. Соединение без предварительной аутентификации
  2. Соединение с предварительной аутентификацией
  3. Соединение отвергнуто
  4. Успешное завершение команды LOGIN или AUTHENTICATE
  5. Успешное завершение команды SELECT или EXAMINE
  6. Выполнение команды CLOSE или неудачная команда SELECT или EXAMINE
  7. Выполнение команды LOGOUT, закрытие сервера или прерывание соединения

Команды протокола IMAP

[править | править код]
LOGIN
Позволяет клиенту при регистрации на сервере IMAP использовать идентификатор пользователя и пароль в обычном текстовом виде. Это не самый лучший метод, но иногда это единственная возможность подключиться к серверу.
AUTHENTICATE
Позволяет клиенту использовать при регистрации на сервере IMAP альтернативные методы проверки подлинности. Индивидуальная проверка подлинности пользователей не является обязательной и поддерживается не всеми серверами IMAP. К тому же реализации такой проверки могут различаться в зависимости от сервера. Когда клиент выдает команду AUTHENTICATE, сервер отвечает на неё строкой вызова в кодировке base64. Далее клиент должен отправить ответ на вызов сервера о проверке подлинности, также закодированный base64. Если на сервере не поддерживается метод проверки подлинности, предложенный клиентом, он включает в свой ответ слово NO. После этого клиент должен продолжить переговоры по согласованию метода проверки подлинности. Если все попытки определить метод проверки подлинности потерпели неудачу, то клиент предпринимает попытку зарегистрироваться на сервере посредством команды LOGIN.
CLOSE
Закрывает почтовый ящик. Когда почтовый ящик закрыт с помощью этой команды, то сообщения, помеченные флагом \DELETED, удаляются из него. Не имеет параметров.
LOGOUT
Завершает сеанс для текущего идентификатора пользователя.
CREATE
Создаёт новый почтовый ящик. Имя и местоположение новых почтовых ящиков определяются в соответствии с общими спецификациями сервера.
DELETE
Применяется к почтовым ящикам. Сервер IMAP при получении этой команды попытается удалить почтовый ящик с именем, указанным в качестве аргумента команды. Сообщения удаляются вместе с ящиками и восстановлению не подлежат.
RENAME
Изменяет имя почтового ящика. Эта команда имеет два параметра — имя почтового ящика, который требуется переименовать, и новое имя почтового ящика.
SUBSCRIBE
Добавляет почтовый ящик в список активных ящиков клиента. В этой команде используется только один параметр — имя почтового ящика, который нужно внести в список. Почтовый ящик не обязательно должен существовать, чтобы его можно было добавить в список активных ящиков — это позволяет добавлять в список активных ящиков ящики, которые ещё не созданы, или удалять их, если они пусты.
UNSUBSCRIBE
Удаляет почтовые ящики из списка активных. В ней так же используется один параметр — имя почтового ящика, который удаляется из списка активных ящиков клиента. При этом сам по себе почтовый ящик не удаляется.
LIST
Получить список всех почтовых ящиков клиента; имеет два параметра.
LSUB
В отличие от команды LIST используется для получения списка ящиков, активизированных командой SUBSCRIBE. Параметры — такие же, как у LIST.
STATUS
Формирует запрос о текущем состоянии почтового ящика. Первым параметром для этой команды является имя почтового ящика, к которому она применяется. Второй параметр — это список критериев, по которым клиент хочет получить информацию. Команда STATUS может использоваться для получения информации о состоянии почтового ящика без его открытия с помощью команд SELECT или EXAMINE.
Пользователь может получить информацию по критериям:
  • MESSAGES — общее число сообщений в почтовом ящике
  • RECENT — число сообщений с флагом \recent
  • UIDNEXT — идентификатор UID, который будет назначен новому сообщению
  • UIDVALIDITY — уникальный идентификатор почтового ящика
  • UNSEEN — число сообщений без флага \seen
APPEND
Добавляет сообщение в конец указанного почтового ящика. В качестве аргументов указываются имя ящика, флаги сообщения (не обязательно), метка времени (не обязательно) и само сообщение — заголовок и тело.
Имеются следующие флаги сообщений:
  • \Seen — прочитано
  • \Answered — написан ответ
  • \Flagged — срочное
  • \Deleted — помечено для удаления
  • \Draft — черновик
  • \Recent — новое сообщение, оно поступило в почтовый ящик после окончания прошлого сеанса
Если в команде указаны флаги, то они устанавливаются для добавляемого сообщения. В любом случае для сообщения устанавливается флаг \Recent.
Если в команде задана метка времени, то это время будет установлено в качестве времени создания сообщения, в противном случае за время создания принимается текущее время.
Поскольку сообщение состоит не из одной строки, используются литералы.
Пример:
C	A003 APPEND saved-messages (\Seen) {247}
S	+ Ready for literal data
C	Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
C	From: Fred Foobar <[email protected]>
C	Subject: afternoon meeting
C	To: [email protected]
C	Message-Id: <[email protected]>
C
C	Hello Joe, do you think we can meet at 3:30 tomorrow?
S	A003 OK APPEND completed
Расширение MULTIAPPEND, описанное в RFC 3502, позволяет одной командой добавлять в почтовый ящик несколько сообщений.
CHECK
Устанавливает контрольную точку в почтовом ящике. Любые операции, такие, например, как запись данных из памяти сервера на его жёсткий диск, должны выполняться при соответствующем состоянии почтового ящика. Именно для проверки целостности почтового ящика после дисковых и других подобных им операций и применяется команда CHECK. Эта команда используется без параметров.
EXPUNGE
Удаляет из почтового ящика все сообщения, помеченные флагом \DELETED, при этом почтовый ящик не закрывается. Ответ сервера на команду EXPUNGE представляет собой отчёт о новом состоянии почтового ящика.
SEARCH
Поиск сообщений по критериям в активном почтовом ящике с последующим отображением результатов в виде номера сообщения.
Возможен поиск сообщений, в теле которых имеется определённая текстовая строка, или имеющих определённый флаг, или полученных до определённой даты и т. д.
FETCH
Получить текст почтового сообщения. Команда применяется только для отображения сообщений. В отличие от POP3, клиент IMAP не сохраняет копию сообщения на клиентском ПК.
STORE
Изменяет информацию о сообщении.
COPY
Копирует сообщения из одного почтового ящика в другой.
UID
Используется в связке с командами FETCH, COPY, STORE или SEARCH. С её помощью в этих командах можно использовать реальные идентификационные номера UID вместо последовательности чисел из диапазона номеров сообщений.
CAPABILITY
Запрос у сервера IMAP информации о его возможностях.
NOOP
Команда ничего не делает. Она может применяться для поддержки активности во время сеанса для того, чтобы сеанс не прекратился по таймеру интервала ожидания. Ответ сервера на команду NOOP всегда должен быть положительным. Так как сервер часто в ответе возвращает состояние выполнения той или иной команды, то NOOP вполне можно использовать как триггер для периодического запроса о состоянии сервера.

Литература

[править | править код]
  • Hughes, L. Internet e-mail Protocols, Standards and Implementation. — Artech House Publishers, 1998. — ISBN 0-89006-939-5.
  • Johnson, K. Internet Email Protocols: A Developer's Guide. — Addison-Wesley Professional, 2000. — ISBN 0-201-43288-9.
  • Loshin, P. Essential Email Standards: RFCs and Protocols Made Practical. — John Wiley & Sons, 1999. — ISBN 0-471-34597-0.
  • Rhoton, J. Programmer's Guide to Internet Mail: SMTP, POP, IMAP, and LDAP. — Elsevier, 1999. — ISBN 1-55558-212-5.
  • Wood, David. Programming Internet Email : Mastering Internet Messaging Systems. — O'Reilly, 1999. — 380 p. — ISBN 1-56592-479-7.

Примечания

[править | править код]
  1. 1 2 В чем разница между POP и IMAP? support.microsoft.com. Дата обращения: 19 июля 2021. Архивировано 19 июля 2021 года.
  2. 1 2 3 Семенов, 2014.
  3. 1 2 University of Washington.