Опубликован: 21.11.2006 | Уровень: специалист | Доступ: платный
Лекция 7:

Протокол IMAP

Команда COPY

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

COPY <message set> <mailbox name>

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

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

Команда UID

Команда UID используется в связке с командами FETCH, COPY, STORE или SEARCH. С ее помощью в этих командах можно использовать реальные идентификационные номера UID, вместо последовательности чисел из диапазона номеров сообщений. Идентификационный номер UID представляет собой 32-битовое целое число, которое однозначно идентифицирует сообщения в почтовом ящике для системы электронной почты. Как правило, эти функции выполняют номера сообщений. Однако они не являются постоянными и могут принимать различные значения после поступления в ящик новых сообщений или удаления старых. Поэтому однозначно идентифицировать сообщения для программ-клиентов IMAP между сеансами может только идентификатор UID.

Команда CAPABILITY

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

1 [riley@shadrach riley]$ telnet localhost 143
2 Trying 127.0.0.1...
3 Connected to local host.
4 Escape character is '^]'.
5 * OK localhost IMAP4revl v12.250 server ready
6 a1 login riley firetruck
7 a1 OK LOGIN completed
8 a2 capability
9 * CAPABILITY IMAP4 IMAP4REV1 NAMESPACE IDLE SCAN SORT MAILBOX-REFERRALS LOGIN-RE
10 FERRALS AUTH=LOGIN THREAD=ORDEREDSUBJECT
11 a2 OK CAPABILITY completed
12 a3 logout
13 * BYE shadrach.smallorg.org IMAP4rev1 server terminating connection
14 a3 OK LOGOUT completed
15 Connection closed by foreign host.
16 [riley@shadrach riley]$
Листинг 7.14. Пример сеанса IMAP с применением команды CAPABILITY
Команда NOOP

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

Команда LOGOUT

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

Реализация протокола IMAP в ОС Linux

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

ОС Linux как сервер IMAP

Программный пакет imapd является одной из широко распространенных реализаций сервера IMAP4, разработанной в Вашингтонском университете. Он входит в большинство дистрибутивов ОС Linux как бинарный программный пакет. Если в вашей версии Linux он отсутствует или вы желаете получить его последнюю версию, то это можно сделать с сервера FTP Вашингтонского университета по адресу ftp://ftp.cac.washington.edu. Последняя версия находится там под названием imap.tar.Z. Когда писалась эта книга текущей версией была imap-4.6.BETA.

Программа imapd вызывается по умолчанию процессом сервера Internet inetd и слушает TCP-порт с номером 143 на предмет установления соединений. Для запуска imapd посредством inetd требуется строка конфигурации в файле /etc/inetd.conf такого содержания:

imap stream tcp nowait root /usr/sbin/tcpd imapd

По умолчанию почтовым каталогом для клиента IMAP является рабочий каталог пользователя $HOME, указанный в файле /etc/passwd. Более детально об установке и конфигурировании программного обеспечения сервера IMAP поговорим в "Установка и конфигурирование POP3 и IMAP" , "Установка и конфигурирование POP3 и IMAP".

ОС Linux как клиент IMAP

Для получения пользователем почты из нескольких почтовых ящиков по протоколу IMAP можно сконфигурировать соответствующим образом программу fetchmail. Для установки базовых параметров можно воспользоваться программой fetchmailconf. С ее помощью можно указать сервер IMAP и транспортный протокол для передачи почты (см. "Протокол POP3" , "Протокол POP3"). Для почтового ящика по умолчанию программа fetchmailconf создает файл конфигурации .fetchmailrc. Как правило, это специальный почтовый ящик с именем INBOX. Если требуется проверять другие почтовые ящики, которые были сконфигурированы на сервере IMAP, можно задавать в fetchmail опцию -r:

fetchmail -r mailbox

Здесь mailbox — имя почтового ящика (или папки), который будет проверяться вместо ящика INBOX.

Предупреждение

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

Valentin Diduk
Valentin Diduk
Украина, одесса, кпи, 2010
Евгений Олабин
Евгений Олабин
Беларусь, Гродно