
- •7.1 Формат почтовых сообщений, мiме
- •7.2 Модель работы smtp
- •Пользователь
- •7.3 Ретрансляция сообщений
- •7.4 Расширения smtp-сервиса для передачи 8-битных данных
- •7.5 Взаимодействие smtp с транспортным протоколом tcp
- •7.6 Принципы работы
- •7.7 Протокол iмар4
- •7.8 Атрибуты сообщений системы (map)
- •Основные команды
7.7 Протокол iмар4
В этом разделе будет рассмотрена наиболее популярная версия протокола серии IМАР — IМАР4.
Протокол IМАР4(InternetMessageAccessProtocol,Version 4,Протокол доступа к электронной почтеInternet, версия 4)позволяет клиентам получать доступ и манипулировать сообщениями электронной почты на сервере.
Существенным отличием протокола IМАР4 от протокола РОРЗ является то, что IМАР4поддерживает работу с системой каталогов (или папок) сообщений. IМАР4позволяет управлять каталогами (папками) удаленных сообщений так же, как если бы они располагались на локальном компьютере.IМАР4позволяет клиенту создавать, удалять и переименовывать почтовые ящики, проверять наличие новых сообщений и удалять старые. Благодаря тому что IМАР4поддерживает механизм уникальной идентификации каждого сообщения в почтовой папке клиента, он позволяет читать из почтового ящика только сообщения, удовлетворяющие определенным условиям или их части, менять атрибуты сообщений и перемещать отдельные сообщения.
Структура папок в значительной степени зависит от типа почтовой системы, но в любой системе у клиента есть специальный каталог INBOX, куда попадают поступающие клиенту сообщения.
Принципы работы
Протокол IМАР4работает поверх транспортного протокола, который обеспечивает надежный и достоверный канал передачи данных между клиентом и сервером IМАР4.При работе поTCP, IМАР4использует 143-й порт. Команды и данные IМАР4передаются по транспортному протоколу в том виде, в каком их отправляет сервер или пользователь.
Принцип передачи данных IМАР4такой же как и у других подобных протоколов. Сначала клиент и сервер обмениваются приветствиями. Затем клиент отправляет на сервер команды и данные. Сервер, соответственно, передает клиенту ответы на обработку команд и данных. После завершения обмена канал закрывается.
Если сервер использует таймер контроля времени соединения, он должен быть установлен не менее чем на 30-минутный промежуток "неактивности" клиента, т. е. если сервер в течение 30минут получает хотя бы одну команду, таймер сбрасывается.
Весь обмен данными между клиентом и сервером организован в виде строк, завершающихся символами <CRLF>, либо в виде последовательности байт заданной длины. Каждая команда клиента начинается с идентификатора или тега команды. Тег, как правило, представляет собой короткую строку, состоящую из букв и цифр, (например, А0001, А0002 и т. д.). Тег является уникальным идентификатором данной команды клиента. Ответы сервера или следующие команды клиента могут ссылаться на данную команду по ее тегу.
Каждая команда клиента начинается с новой линии. В тех случаях, когда команда передает поток данных заданной длины или когда команда требует ответа с сервера, для того чтобы продолжить работу (например, при аутентификации), она может занимать несколько строк.
Строки данных, передаваемые с сервера в ответ на команду клиента, могут не содержать тег, а содержать символ "*".Это означает, что они являются промежуточными строками потока данных ответа, а идентификатор их команды содержится в последней строке потока. В такой поток данных не может вклиниться другая команда.
Если сервер обнаружил ошибку в команде, он отправляет уведомление BADклиенту с тегом неправильной команды. Если команда успешно обработана —возвращается уведомление ОК с тегом команды. Если команда вернула отрицательный результат, например, в случае невозможности выполнить данную команду —возвращается уведомлениеNOс тегом невыполненной команды.
Важной особенностью протокола IМАР является то, что взаимодействие клиента с сервером не строится по принципу "запрос-ответ", в котором каждая из сторон "ходит" по очереди. Клиент может отправить новую команду на сервер, не дожидаясь ответа на предыдущую, естественно, когда эти команды не взаимосвязаны или ответ одной не повлияет на результат другой. Сервер может обрабатывать несколько команд одновременно и отвечать на каждую из них по ее окончанию. При этом ответ на более позднюю команду может поступить раньше, поэтому ответ сервера всегда содержит тег той команды, к которой он относится.
Для работы в таком режиме, клиент и сервер должны фиксировать весь поток данных обмена, поскольку как сервер так и клиент в своих запросах и ответах могут ссылаться на команды и данные, введенные на предыдущих стадиях сессии обмена.
Для того чтобы обеспечить гибкость и многофункциональность операций работы с сообщениями, почтовые системы IМАРприсваивают сообщениям определенные атрибуты.