Разница между POP3 и IMAP. Протокол POP3 или IMAP – что лучше выбрать для работы почты

Вопрос безопасности становится все более важным по мере распространения информационных технологий. Здесь приходится прорабатывать различные аспекты, которые касаются многих разработок. Так, например, многих интересует вопрос, что такое IMAP безопасность. Насколько надежен InternetAccessProtocol?


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

Что такое IMAP?

Безопасность переписки особенно важна в связи с тем, что в ней может содержаться различная информация. Протокол IMAP используется для обеспечения доступа к данным электронной почты только для тех пользователей, которые имеют на это право. Он был разработан на основе TCP. Данный протокол использует 143 порт. IMAP позволяет работать с почтой, которая находится на центральном сервере. Программное обеспечение, которое использует данный протокол, совершает необходимые действия так, что создается впечатление, будто вся корреспонденция хранится на компьютере пользователя.

При больших объемах пересылки может использоваться специальный сервер IMAP. Для манипуляции с письмами не требуется постоянная пересылка к получателю файлов с содержимым. Это далеко не единственный протокол, который сегодня используется в работе с почтовыми сервисами. Для отправки писем может использоваться протокол SMTP, так как в IMAP команда отправки не может гарантировать безопасность на все 100%. У этого протокола имеются некоторые известные уязвимости.

Для чего был разработан протокол IMAP?

Данный протокол разрабатывался как альтернатива известному протоколу POP3. Началось все из-за недостатков протокола POP3. Так, например, в нем не была предусмотрена возможность управления, перемещения и хранения сообщений на сервере. По этой причине был разработан протокол IMAP. Именно с помощью этого протокола пользователь может получать почту в различных местах. Это стало возможно благодаря тому, что вся нужная информация хранится на удаленном сервере.

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

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

— соединение не разрывается, пока пользовательский интерфейс активен;
— сообщения будут загружены только в случае наличия со стороны клиента соответствующих требований;
— возможно осуществление одновременного доступа нескольких пользователей, при этом каждый из пользователей может следить за выполненными изменениями;
— клиент получает возможность создать, удалять или менять название ящиков. Также между ящиками можно перемещать сообщения;
— при наличии расширения IMAP 4 AccessControlList имеется возможность изменения прав доступа;
— можно также следить за состоянием самого сообщения. Данные об операциях называются флагами и хранятся на серверах;
— поиск нужного сообщения осуществляется на сервере. Существует специальный механизм расширениям.

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

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

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

Номер сообщения

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

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

Данный атрибут представляет собой список, в котором имеется нуль или большое количество именованных лексем, соотнесенных с основной информацией. В протоколе IMAP 4.1 были внедрены флаги двух типов. Действовать они могут временно, например, на протяжении сессии, а могут быть постоянными. Системным называют тот флаг, для которого имя определяется в спецификации протокола. Все флаги обязательно должны начинаться с символа «\». На сегодняшний день определены следующие системные флаги:

— \seen– сообщение уже прочитано;
— \answered – ответ отправлен;
— \recent – сообщение появилось во время текущей сессии;
— \draft – сообщение было отмечено как черновой вариант;
— \flagged – пользователь отметил данное сообщение как важное;
— \deleted – пользователь удалил сообщение.

Внутренние дата и время

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

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

При использовании протокола IMAP связь устанавливается по принципу клиент-сервер. Клиент посылает от себя все полученные команды, а сервер шлет запрошенные данные и информацию на выполнение запроса. Сообщения имеют форму строк, которые завершаются специальной последовательностью. Все процедуры выполняются по команде клиента. Распознаются они при помощи специального префикса-идентификатора. В качестве данного идентификатора используется краткая буквенно-цифровая строка.

Иначе она еще называется меткой. Каждая команда имеет собственный уникальный номер. Возможны два случая, в которых отправленные клиентом данные могут быть незаконченными. Первый случай возникает тогда, когда аргумент команды имеет код, который ранее определил число октетов. Второй случай возникает, когда требуется отклик от сервера. Клиент в обоих случаях получает запрос на продолжение команды. Он обязательно должен начинаться с символа +. Передача должна быть завершена при начале поступления определенного типа данных.

Иначе начать новый процесс будет невозможно. Передача данных серверу, чтение, выделение параметров осуществляется при помощи протокольного приемника. Когда обработка команды будет завершена, клиенту будет отправлен отклик с данным уведомлением. Информация, которая не указывает на завершение выполнения инструкция, снабжена знаком *. Она называется непомеченным откликом. Также в протоколе IMAP возможна отправка данных серверов в качестве ответа на запросы клиента или по собственной инициативе. Формат данных не зависит от причины, по которой они были отправлены.

Что можно сказать про использование популярных почтовых сервисов? Простым пользователям IMAP настройки недоступны. Их можно выполнить только в том случае, если письмо отправляется при помощи специальной клиентской программы. Причем, данные настройки действуют только по отношению к входящим письмам. Для чего нужны отклики? Они сообщают пользователю об успешном или неудачном выполнении запроса. Отклик всегда использует ту же метку, которую использовала команда клиента при запуске процедуры.

По этой причине возможна многопоточная передача данных. Для разъяснения данной ситуации могут использоваться три типа откликов: успешное выполнение, неудача и протокольная ошибка IMAP. Клиент должен быть готов всегда обработать любой отклик, который поступает к нему. Данные должны быть записаны так, чтобы клиент мог использовать их без необходимости отправки уточняющих запросов серверу. Подобное довольно часто можно видеть в Gmail. Настройки IMAP могут быть изменены или отредактированы при использовании почтовых клиентов с широким набором функций.

В настоящее время методов общения через Интернет масса. Можно использовать ICQ или Skype, социальные сети, иные ресурсы. Примерно два десятка лет назад единственным способом отправить или получить виртуальное письмо была электронная почта.

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

Протоколы передачи данных, используемые при работе с электронной почтой

Любой форме коммуникаций присущ определенный стиль – набор соглашений. В сети – это протокол. При работе с E-mail может использоваться ряд протоколов. Среди них:

  • POP3;
  • IMAP.

В чем заключается разница, какой протокол и в каком случае целесообразно использовать?

Что такое POP3

Желая отправить письмо или поверить личный почтовый ящик, расположенный на удаленном сервере, пользователь может воспользоваться браузером, установленным на компьютере, что не совсем удобно. Чаще применяется , которая и обменивается информацией с сервером, используя определенный протокол. Если это – Post Office Protocol, процесс происходит следующим образом:

  1. Соединение;
  2. Получение клиентом информации о состоянии ящика, загрузка писем;
  3. Обновление сервера и удаление выбранных сообщений;
  4. Закрытие соединения.

Что такое IMAP

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

Плюсы и минусы IMAP и POP3

Какой протокол выбрать? Все зависит от специфики работы и потребностей.

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

  • Возможность доступа к ящику с нескольких клиентов;
  • Поддержка одновременного доступа нескольких клиентов;
  • Поддержка нескольких ящиков;
  • Возможность создания новых папок, к которым может быть открыт доступ другим пользователям;
  • Возможность помечать письма как прочитанные, важные и другие;
  • Поддержка поиска на сервере;
  • Возможность работы в режиме on-line.

Минус в данном случае единственный – пользователь тратит больше времени на загрузку писем с центрального компьютера.

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

Если же говорит об использовании электронной почты по прямому назначению, то для этого достаточно открыть любой браузер, зайти на сайт почтовой службы и авторизоваться на нем для чтения новых писем. Но существует также возможность просмотра корреспонденции без браузера - при помощи специального почтового клиента. И для этого используются 2 почтовых протокола - IMAP и POP3.

Чем отличается POP3 от IMAP?

Техническое отличие протоколов POP3 и IMAP в целом не существенное. Оба они являются интернет-протоколами прикладного уровня используют порты 110 и 143 соответственно для доступа к серверу посредством TCP/IP. Назначение у протоколов фактически одинаковое, но выполняют его они несколько разными способами. И для того, чтобы точнее понять, чем отличается POP3 от IMAP, нужно подробнее разобраться в принципе их работы.

Работающие с протоколом POP3 почтовые клиенты позволяют единовременно скачивать файлы с почтового сервера, при этом подключаются к сети они только ради этого. Это значит, что дальнейшая работа с электронной корреспонденцией происходит без использования сети.

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

Благодаря тому, что POP3-клиент только скачивает файлы, а дальнейшая работа проводится офлайн, он работает немного быстрее. Работа IMAP-клиента требует больше ресурсов, так как ведется онлайн. Также стоит отметить еще одно существенное отличие POP от IMAP, по которым многие почтовые сервисы, в том числе и Yandex, отдают предпочтению последнему - многопользовательский режим. Протокол IMAP допускает подключение к серверу нескольких клиентов, тогда как POP3 допускает лишь монопользовательский режим.

Итак, давайте подведем итог, в чем заключаются отличия IMAP и POP3:

  • они используют разные порты для работы с сервером - 110 для POP3 и 143 для IMAP;
  • POP3 работает только в офлайн-режиме, IMAP может работать как офлайн, так и онлайн;
  • для работы с файлами и сообщениями с использованием протокола POP3 нужно загружать их на локальный компьютер, IMAP же позволяет работать с ними прямо на сервере;
  • POP3 имеет более быстрый доступ к серверу, чем IMAP;
  • IMAP позволяет настроить разделение прав доступа, тогда как у POP3 такой возможности нет.

Теперь вы знаете, в чем состоит отличие POP от IMAP. В заключение стоит отметить, что на данный момент в сети более распространено использование протокола POP3 из-за его простоты настройки. Тем не менее, IMAP стремительно завоевывает популярность, в первую очередь, при работе с электронной корреспонденцией с использованием мобильных устройств. В целом же многие почтовые сервисы комбинируют использование этих протоколов, в зависимости от нужд клиента и используемого им устройства.

Базируется на транспортном протоколе TCP и использует порт 143.

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

Для отправки писем используется протокол SMTP .

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

Протокол IMAP представляет собой альтернативу POP3.

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

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

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

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

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

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

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

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

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

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

  • Original IMAP (1986, спецификация отсутствует)
  • IMAP2 (1988 - RFC 1064 , 1990 - RFC 1176)
  • IMAP3 (1991, RFC 1203)
  • IMAP2bis (спецификация существует только в черновом варианте 1993 года)
  • IMAP4 (переименованный IMAP2bis)

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

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

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

UID

Каждому сообщению ставится в соответствие 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 Завершает сеанс для текущего идентификатора пользователя и закрывает все открытые почтовые ящики. Если какие-либо сообщения были помечены флагом \deleted , то с помощью этой команды они будут физически удалены из почтового ящика. 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 C Subject: afternoon meeting C To: [email protected] C Message-Id: 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 вполне можно использовать как триггер для периодического запроса о состоянии сервера.

Ссылки

  • RFC 3501 Internet Message Access Protocol v4rev1 (англ.)
  • The IMAP Connection (англ.)
  • Howto: Configuring KMail with Gmail - IMAP and Disconnected IMAP (англ.)

Протокол IMAP (Internet Mail Access Protocol) описывается в RFC 2060.

В отличии от POP3, который просто скачивает входящие письма и сохраняет их локально, с IMAP вы работаете с почтой непосредственно на сервере

Как и POP3 , протокол IMAP использует концепцию клиент-сервер с набором команд. С помощью команд осуществляется передача сообщений электронной почты от сервера клиенту. Клиент устанавливает для этой цели TCP-соединение с портом 143 на сервере. Далее сервер должен ответить специальным сообщением-приглашением.

1 ". 5 * OK shadrach.smallorg.org IMAP4revl V12.250 server ready 6 a001 LOGOUT 7 * BYE shadrach.smallorg.org IMAP4rev1 server terminating connection 8 a001 OK LOGOUT completed 9 Connection closed by foreign host. 10 $

В строке 1 показана команда на открытие сеанса с помощью telnet с портом 143 (порт IMAP по умолчанию). Строка 5 отображает приглашение, выданное сервером IMAP. В строке 6 клиентом задана команда закончить сеанс с сервером. Затем сервер посылает сообщение об окончании сеанса (строка 7) и закрывает соединение с клиентом.

Каждая команда, выдаваемая клиентом, предваряется уникальным идентификатором. Сервер может затем использовать этот идентификатор в своих ответах, что позволяет клиенту определить, к какой команде относится ответ сервера. Это особенно важно при выполнении сервером нескольких команд за сеанс. Идентификатор обычно представляет собой короткую строку алфавитно-цифровых символов, которая генерируется клиентом. Так, в строке 6 листинга 7.1 клиентом был выбран идентификатор a001. Если бы клиенту потребовалось задавать и другие команды, то следующим идентификатором был бы a002 и т.д. Часто для упрощения идентификаторы команд в течение сеанса IMAP просто последовательно увеличивают один из своих разрядов.

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

Методы проверки подлинности пользователя в IMAP

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

Команда LOGIN

Команда LOGIN позволяет клиенту при регистрации на сервере IMAP использовать идентификатор пользователя и пароль в обычном текстовом виде.

Команда AUTHENTICATE

С помощью команды AUTHENTICATE клиент может использовать при регистрации на сервере IMAP альтернативные методы проверки подлинности. Индивидуальная проверка подлинности пользователей не является обязательной и поддерживается не всеми серверами IMAP. К тому же реализации такой проверки могут различаться в зависимости от сервера. Когда клиент выдает команду AUTHENTICATE, сервер отвечает на нее строкой вызова в кодировке base64. Далее в обязанности клиента входит ответ на вызов сервера о проверке подлинности, также закодированный base64. Если на сервере не поддерживается метод проверки подлинности, предложенный клиентом, он включает в свой ответ отрицательное слово NO. После этого клиент должен продолжить переговоры по согласованию метода проверки подлинности. Если все попытки определить метод проверки подлинности потерпели неудачу, то клиент предпринимает попытку зарегистрироваться на сервере посредством команды LOGIN. Пример сеанса с применением AUTHENTICATE:

1 [ [email protected] shadrach riley] $ telnet localhost 143 2 Trying 127.0.0.1... 3 Connected to localhost. 4 Escape character is "^]" . 5 * OK localhost IMAP4rev1 v12.250 server ready 6 a1 AUTHENTICATE KERBEROS_V4 7 a1 NO AUTHENTICATE KERBEROS_V4 failed 8 a2 AUTHENTICATE GSSAPI 9 a2 NO AUTHENTICATE GSSAPI failed 10 a3 AUTHENTICATE LOGIN 11 + VXNlciBOYU1lAA == 12 * 13 a3 NO AUTHENTICATE LOGIN failed 14 a4 LOGIN riley firetruck 15 a4 OK LOGIN completed 16 a5 LOGOUT 17 * BYE shadrach.smallorg.org IMAP4rev1 server terminating connection 18 a5 OK LOGOUT completed 19 connection closed by foreign host. 20 [ [email protected] shadrach riley] $

В строках 6–9 показаны попытки клиента согласовать с сервером IMAP метод проверки подлинности. Как видите, все они не увенчались успехом. А в строке 10 показано, что метод проверки, приемлемый и для клиента, и для сервера, найден. Отвечая, сервер в строке 11 выдает кодированную строку с вызовом в кодировке base64. Однако в строке 12 клиент отвергает попытку регистрации и возобновляет ее лишь в строке 14 с помощью команды LOGIN.

Клиентская часть протокола IMAP

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

Почтовый ящик для клиента по умолчанию носит название INBOX. Все новые сообщения ложатся именно в INBOX. Клиент имеет возможность создавать новые почтовые ящики (иногда называемые в программах-клиентах для работы с электронной почтой папками). Туда с целью упорядочения он может перемещать сообщения из папки INBOX.

Каждому сообщению назначается уникальный идентификатор (UID), по которому они идентифицируются в почтовом ящике. Метка UID сохраняется в течение всех сеансов IMAP для того, чтобы клиентское программное обеспечение могло правильно идентифицировать сообщения в почтовом ящике. Каждому почтовому ящику соответствует уникальный идентификатор достоверности (UIDVALIDITY). Метка UIDVALIDITY должна присутствовать во время всех сеансов IMAP, только в том случае, если идентификаторы сообщений в ящике оставались неизменными. Если в почтовом ящике имеются сообщения с различными идентификаторами, то значение UIDVALIDITY при следующем сеансе должно увеличиться. Это позволяет клиентам быстро определять, появились ли в почтовом ящике новые сообщения с момента последнего к нему обращения.

Каждое сообщение снабжается флагом, который отображает его статус. Флаг может быть постоянным или задаваться на время сеанса. Постоянные флаги могут изменяться клиентом и сохраняться вне зависимости от сеансов. Флаги, назначаемые на время сеанса, действительны только на время текущего сеанса IMAP. В табл. 7.1 представлены варианты флагов почтовых сообщений.

Флаги почтового сообщения IMAP

Флаг Описание \Seen Сообщение прочитано \Answered На сообщение послан ответ \Flagged Сообщение принудительно отмечено \Deleted Сообщение удалено \Draft Сообщение не окончено (черновик) \Recent Новое сообщение в почтовом ящике

Почтовому сообщению может соответствовать 0 флагов или несколько флагов. Информация о флагах передается клиенту вместе с самим сообщением. В обязанности клиента входит интерпретация флагов соответствующим образом.

В следующем разделе описываются команды IMAP, которые клиент может задавать серверу.

Хотя, согласно RFC , команды IMAP набираются заглавными буквами, большинство серверов IMAP воспринимает команды, заданные как заглавными, так и прописными буквами.

Сервер должен отвечать соответствующим образом на заданные команды или отвечать отрицательно, если команда задана неправильно либо не поддерживается.

Команда SELECT

Команда SELECT используется, лишь когда почтовый ящик активен. По умолчанию, пока клиент не зарегистрирован в системе, ни один из принадлежащих ему почтовых ящиков не является выбранным. Далее клиент должен выбрать почтовый ящик, с которым он собирается работать. Обычно первый ящик, который выбирается клиентом, - это ящик INBOX, куда помещаются новые сообщения. Формат команды SELECT следующий:

SELECT mailbox

Здесь mailbox - это название почтового ящика, к которому обращается клиент. Во время одного сеанса IMAP может быть активен только один почтовый ящик. Если ящик существует и у клиента имеется соответствующий доступ к нему, то сервер дает многострочный ответ, где описывается состояние почтового ящика.

Команда CREATE

Команда CREATE используется для создания нового почтового ящика на сервере IMAP. Имя и местоположение новых почтовых ящиков определяются в соответствии с общими спецификациями ОС Linux. В рабочем каталоге пользователя создается новый почтовый ящик с именем, но без задания местоположения, так как оно известно каталогу $HOME клиента. Например, если рабочий каталог клиента находится в /home/riley и клиент задает команду CREATE для создания нового почтового ящика stuff/junk, то вновь созданный ящик на почтовом сервере под управлением ОС Linux будет иметь путь /home/riley/stuff/junk. В этом примере вы видите, как используется знак разделителя /. Однако это не является общим для всех серверов IMAP.

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

Команда DELETE

Команда DELETE применяется к почтовым ящикам, а не к сообщениям. Сервер IMAP при получении этой команды попытается удалить почтовый ящик с именем, указанным в качестве аргумента команды. В аргументе команды можно использовать стандартное описание путей ОС Linux, со знаком разделителя /, если только они не находятся в каталоге $HOME. Сообщения из удаленных почтовых ящиков восстановлению не подлежат и теряются вместе с ящиками.

Команда RENAME

С помощью команды RENAME клиент может изменить имя почтового ящика. При этом возможно применение двух параметров. Первый параметр - собственно имя почтового ящика, который требуется переименовать. И второй параметр - новое имя почтового ящика.

Переименование не влияет на содержимое почтового ящика.

Команда LIST

Команда LIST используется для получения списка всех почтовых ящиков клиента. С ней используются два параметра. Формат команды LIST приведен ниже:

LIST reference mailbox

Здесь reference - каталог, где находятся почтовые ящики. Если задается пустая строка вместо этого параметра (""), то почтовые ящики находятся в рабочем каталоге пользователя $HOME. Второй параметр mailbox является именем почтового ящика, который нужно просмотреть. Здесь допускается использование специальных символов, так же, как и при получении обычного списка каталогов, например группового символа (*). Если именем почтового ящика задана пустая строка (""), то сервер будет возвращать в качестве ответа иерархический разделитель (для Linux /) и имя корневого параметра.

Команда LSUB

Команда LSUB используется для устранения проблемы, которая описана для команды LIST. В отличие от команды LIST, с помощью которой отображается все содержимое рабочего каталога пользователя, с помощью команды LSUB отображаются лишь активизированные ранее описанной командой SUBSCRIBE почтовые ящики клиента. Параметры команды LSUB точно такие же, что и для команды LIST, т.е. ссылка (reference) и имя почтового ящика. Подобно команде LIST, параметр ссылки указывает путь к каталогу, в котором находятся почтовые ящики с соответствующими именами (каталог $HOME, если указано ""). Соответственно, под именем почтового ящика понимается имя ящика или имена ящиков, которые требуется вывести в списке (допускается групповой символ (*).

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

Команда APPEND

APPEND - еще одна команда из семейства команд IMAP. Как правило, протокол IMAP применяется исключительно для чтения сообщений из почтовых ящиков. С помощью команды APPEND появляется возможность посылать сообщения в почтовый ящик, добавляя сообщение к концу файла почтового ящика. Эта функция работает не совсем корректно и она является довольно опасной, поэтому не рекомендуем увлекаться ею в качестве альтернативы SMTP. Это, скорее, приятное излишество протокола IMAP, а не рабочая лошадка. Основной формат команды APPEND следующий:

APPEND mailbox [(flags)] {message size} message

Команда CHECK

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

Команда CLOSE

Команда CLOSE полностью соответствует своему названию - она закрывает почтовый ящик.

Когда почтовый ящик закрыт, то все сообщения, помеченные флагом \DELETED, физически удаляются из него.

Действие команды CLOSE четко прослеживается на только что открытом новом почтовом ящике. Открытый почтовый ящик закрывается также с помощью команды LOGOUT. Команда CLOSE не имеет параметров.

Команда EXPUNGE

Команда EXPUNGE используется для удаления из почтового ящика всех сообщений, помеченных флагом \DELETED, при этом почтовый ящик не закрывается.

Ответ сервера на команду EXPUNGE представляет собой отчет о новом состоянии почтового ящика.

1 $ telnet localhost 143 2 Trying 127.0.0.1... 3 Connected to localhost. 4 Escape character is "^]". 5 * OK localhost lMAP4rev1 v12.250 server ready 6 a1 login alex drums 7 a1 OK LOGIN completed 8 a2 select newbox 9 * 6 EXISTS 10 * 0 RECENT 11 * OK DID validity status 12 * OK Predicted next UID 13 * FLAGS (\Answered \Flagged \Deleted \Draft \Seen) 14 * OK Permanent flags 15 * OK first unseen message in /home/alex/newbox 16 a2 OK SELECT completed 17 a3 store 1 +flags \DELETED 18 * 1 FETCH (FLAGS (\Deleted)) 19 a3 OK STORE completed 20 a4 store 2 +flags \DELETED 21 * 2 FETCH (FLAGS (\Deleted)) 22 a4 OK STORE completed 23 a5 status newbox (messages unseen) 24 * STATUS newbox (MESSAGES 6 UNSEEN 6) 25 a5 OK STATUS completed 26 a6 expunge 27 * 1 EXPUNGE 28 * 1 EXPUNGE 29 * 4 EXISTS 30 * 0 RECENT 31 a6 OK Expunged 2 messages 32 a7 status newbox (messages unseen) 33 * STATUS newbox (MESSAGES 4 UNSEEN 4) 34 a7 OK STATUS completed 35 a8 logout 36 * BYE shadrach.sniallorg.org IMAP4rev1 server terminating connecion 37 a8 OK LOGOUT completed 38 Connection closed by foreign host. 39 $

В строке 8 пользователь alex выбирает почтовый ящик с именем newbox. Строки 9–16 представляют собой ответ сервера с информацией относительно выбранного почтового ящика. Строка 9 говорит о том, что в нем находится 6 сообщений. В строках 17 и 20 пользователь alex воспользовался командой STORE, чтобы пометить два сообщения как удаленные (\DELETED). Затем в строке 23 пользователь alex выдает команду STATUS. Из строки 24 можно сделать заключение, что, с точки зрения сервера IMAP, в почтовом ящике все еще находятся шесть сообщений, хотя два из них помечены как удаленные. В строке 26 пользователь выдает команду EXPUNGE, по которой сообщения, помеченные как удаленные, стираются. Ответ сервера в строках 27–31 подтверждает, что сообщения были удалены из ящика и в нем осталось четыре сообщения. Это же подтверждает и команда STATUS, заданная в строке 32. На нее сервер отвечает, что в почтовом ящике теперь только четыре сообщения.

Команда SEARCH

Команда SEARCH является одним из наиболее мощных средств из арсенала IMAP. С помощью этой команды производится поиск сообщений по критериям в активном почтовом ящике с последующим отображением результатов в виде номера сообщения. Формат команды SEARCH следующий:

SEARCH (search criteria)

Здесь CHARSET specification состоит из служебного слова CHARSET, за которым следует обозначение набора символов. Набор символов по умолчанию - ASCII , так что, как правило, этот параметр опускается. Параметр search criteria определяет ключевые критерии поиска и их значения. Критерии поиска описаны в табл. 7.3.

Таблица. Критерии поиска для команды SEARCH

Критерий поиска Описание Сообщения с номерами, соответствующими заданному диапазону ALL Все сообщения в почтовом ящике ANSWERED Сообщения с флагом \ANSWERED BCC Сообщения, содержащие заданную строку в поле заголовка BCC BEFORE Сообщения, которые были созданы до указанной даты BODY Сообщения, содержащие в теле указанную строку CC Сообщения, содержащие заданную строку в поле заголовка CC DELETED Сообщения с флагом \DELETED DRAFT Сообщения с флагом \DRAFT FLAGGED Сообщения с набором флагов \FLAGGED From Сообщения, содержащие заданную строку в поле заголовка From HEADER Сообщения, содержащие указанный заголовок с заданной в нем строкой KEYWORD Сообщения, содержащие указанный список критериев LARGER Сообщения, размер которых больше n NEW Сообщения с флагом \RECENT, но без флага \SEEN NOT Сообщения, не содержащие указанный список критериев OLD Сообщения без флага \RECENT ON Сообщения, которые были созданы в указанный день OR Сообщения, содержащие логические критерии поиска ИЛИ RECENT Сообщения с флагом \RECENT SEEN Сообщения с флагом \SEEN SENTBEFORE Сообщения, которые были созданы до указанной даты, согласно полю заголовка Date SENTON Сообщения, которые были созданы в указанную дату, согласно полю заголовка Date SENTSINCE Сообщения, которые были созданы после указанной даты, согласно полю заголовка Date SINCE Сообщения, которые были созданы после указанной даты SMALLER Сообщения, размер которых не превышает n TEXT Сообщения, которые содержат указанную строку или в заголовках, или в теле сообщения UID Сообщения с UID, соответствующими заданному диапазону UNANSWERED Сообщения без флага \ANSWERED UNDELETED Сообщения без флага \DELETED UNDRAFT Сообщения без флага \DRAFT UNFLAGGED Сообщения без набора флагов \FLAGGED UNKEYWORD Сообщения без набора заданных критериев UNSEEN Сообщения без флага \SEEN

Как видно из таблицы существует огромное количество критериев поиска сообщений. Это очень удобно, когда требуется найти специфическое сообщение в почтовых ящиках, которые заполнены большим количеством сообщений. Ниже представлен короткий пример с использованием команды SEARCH.

1 $ telnet localhost 143 2 Trying 127.0.0.1... 3 Connected to localhost. 2 Escape character is "^]". 4 * OK localhost IMAP4rev1 V12.250 server ready 5 a1 login alex drums 7 a1 OK LOGIN completed 8 a2 select inbox 9 * 2 EXISTS 10 * 0 RECENT 11 * OK UID validity status 12 * OK Predicted next UID 13 * FLAGS (\Answered \Flagged \Deleted \Draft \Seen) 14 * OK Permanent fs 15 * OK first unseen message in /var/spool/mail/alex 16 a2 OK SELECT completed 17 a3 search header subject test 18 * SEARCH 1 2 19 a3 OK SEARCH completed 20 a4 search header subject another 21 * SEARCH 2 22 a4 OK SEARCH completed 23 a5 search unseen 24 * SEARCH 1 2 25 a5 OK SEARCH completed 26 a6 logout 27 * BYE shadrach.smallorg.org IMAP4rev1 server terminating connection 28 a6 OK LOGOUT completed 29 Connection closed by foreign host. 30 $

В строках 17, 20 и 23 показаны примеры использования команды SEARCH. Строки 18, 21 и 24 являются ответами сервера IMAP на команду SEARCH. В ответе содержатся номера сообщений, которые соответствуют критерию поиска. Если соответствий не найдено, то сервер возвращает слово SEARCH без идентификатора сообщения UID.

Команда FETCH

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

Команда STORE

Команда STORE применяется для изменения информации о сообщении. Формат команды следующий:

STORE

Аргумент задает диапазон номеров сообщений, к которым применяется команда STORE. В настоящее время для этой команды определено только два типа данных (). Тип FLAGS определяет набор флагов, установленных для сообщения. Тип FLAGS.SILENT также определяет набор флагов, установленных для сообщения, но при этом сервер IMAP не возвращает их новое значение в своем ответе.

Поведением этих типов данных можно управлять, задав перед ними знак плюс (+) или минус (-). Знак плюс означает, что значение типа данных () будет добавлено к сообщению, минус - что оно будет удалено из сообщения.

17 a3 store 1 +flags \DELETED 18 * 1 FETCH (FLAGS (\Deleted)) 19 a3 OK STORE completed

В строке 18 этого листинга показано, как устанавливается флаг \DELETED для сообщения в активном почтовом ящике с номером 1. Обратите внимание, что перед флагом задан знак плюс (+). Можно было бы также задать флаг (-). Тогда флаг \DELETED был бы отменен для сообщения (один из способов восстановить удаленное сообщение до того, как вступят в силу контрольные точки сообщения).

Сообщение, помеченное флагом \DELETED, не удаляется физически из почтового ящика до выполнения команд по назначению новых контрольных точек для почтового ящика. А это делается с помощью команд CHECK, EXPUNGE, SELECT или LOGOUT.

Команда COPY

Команда COPY используется для копирования сообщений из одного почтового ящика в другой. Формат команды COPY приведен ниже:

COPY

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

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

Команда CAPABILITY

С помощью команды CAPABILITY клиент может запрашивать у сервера IMAP информацию о его возможностях.

Команда NOOP

Действия команды NOOP, как мы знаем, соответствует ее названию, т.е. она ничего не делает. Она может применяться для поддержки активности во время сеанса для того, чтобы сеанс не прекратился по таймеру интервала ожидания. Ответ сервера на команду NOOP всегда должен быть положительным. Так как сервер часто в ответе возвращает состояние выполнения той или иной команды, то NOOP вполне можно использовать как триггер для периодического запроса о состоянии сервера. Если что-то произошло с почтовым ящиком во время периода ожидания, например сервер удалил сообщения согласно правилам, установленным для почтового ящика администратором почтовой системы, то в ответ на команду NOOP будет возвращена обновленная информация о его состоянии.

Команда LOGOUT

Команда LOGOUT используется для завершения сеанса для текущего идентификатора пользователя и закрытия всех открытых почтовых ящиков. Если какие-либо сообщения были помечены флагом \DELETED, то с помощью этой команды они будут физически удалены из почтового ящика.