Россия, Казань, Казанский Национальный Исследовательский Технический Университет |
Протокол IMAP
Команда STATUS
Команда STATUS используется для формирования запроса о текущем состоянии почтового ящика. Первым параметром для этой команды является имя почтового ящика, к которому она применяется. Второй параметр — это список пунктов, по которым клиент может получить информацию (она заключается в круглые скобки () ). Команда STATUS может использоваться отдельно для получения информации о состоянии почтового ящика без его открытия с помощью команд SELECT или EXAMINE.
Список критериев, по которым команда STATUS может выдавать информацию, представлен в табл. 7.2.
Критерий | Описание |
---|---|
MESSAGES | Общее число сообщений в почтовом ящике |
RECENT | Число сообщений в ящике с флагом \RECENT (новые) |
UIDNEXT | Следующий доступный идентификатор UID, который будет назначен новому сообщению |
UIDVALIDITY | Уникальный идентификатор UID почтового ящика |
UNSEEN | Число сообщений в почтовом ящике без флага \SEEN |
Пример сеанса IMAP с командой STATUS показан в листинге 7.9.
1 [alex@shadrach alex]$ 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 status inbox (messages recent unseen) 9 * STATUS inbox (MESSAGES 1 RECENT 0 UNSEEN 0) 10 a2 OK STATUS completed 11 a3 status newbox (messages uidnext unseen) 12 * STATUS newbox (MESSAGES 1 UNSEEN 0 UIDNEXT 2) 13 a3 OK STATUS completed 14 a4 logout 15 * BYE shadrach.smallorg.org IMAP4rev1 server terminating connection 16 a4 OK LOGOUT completed 17 Connection closed by foreign host. 18 [alex@shadrach alex]$Листинг 7.9. Пример сеанса IMAP с использованием команды STATUS
В строке 8 пользователь alex выдает команду STATUS для запроса информации о количестве сообщений в почтовом ящике, о количестве новых и непрочитанных сообщений в специальном ящике INBOX. Строка 9 является ответом сервера IMAP на эту команду. В строке 11 пользователем alex выдается команда STATUS уже для другого почтового ящика. Обратите внимание на ответ сервера IMAP в строке 12. Здесь сервер ответил сведениями, запрошенными о почтовом ящике, но не в том порядке, как они запрашивались. Дело в том, что сервер IMAP всегда выводит информацию в определенном порядке. Сведения о состоянии почтового ящика выдаются в таком порядке: MESSAGES, RECENT, UNSEEN, UIDNEXT, и UIDVALIDITY.
Команда APPEND
APPEND — еще одна команда из семейства команд IMAP. Как правило, протокол IMAP применяется исключительно для чтения сообщений из почтовых ящиков. С помощью команды APPEND появляется возможность посылать сообщения в почтовый ящик, добавляя сообщение к концу файла почтового ящика. Эта функция работает не совсем корректно и она является довольно опасной, поэтому не рекомендуем увлекаться ею в качестве альтернативы SMTP. Это, скорее, приятное излишество протокола IMAP, а не рабочая лошадка. Основной формат команды APPEND следующий:
APPEND mailbox [(flags)] [date/time string] {message size} message
Эта команда является фактически рабочим макетом будущей команды. В листинге 7.10 показана попытка помещения сообщения в почтовый ящик. Естественно, что в этом случае программе-клиенту требуются права как на чтение из почтового ящика, так и на запись в него.
1 [alex@shadrach alex]$ 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 login alex drums 7 a1 OK LOGIN completed 8 a2 create testbox 9 a2 OK CREATE completed 10 a3 append testbox (\SEEN) {23} 11 + Ready for argument 12 This is a test message. 13 a3 OK APPEND completed 14 a4 select testbox 15 * 1 EXISTS 16 * 1 RECENT 17 * OK [UIDVALIDITY 937242636] UID validity Status 18 * OK [UIDNEXT 2] Predicted next UID 19 * FLAGS (\Answered \Flagged \Deleted \Draft \Seen) 20 * OK [PERMANENTFLAGS (\* \Answered \Flagged \Deleted \Draft \Seen)] Permanent fs 21 a4 OK [READ-WRITE] SELECT completed 22 a5 logout 23 * BYE shadrach. smallorg.org IMAP4rev1 server terminating connection 24 a5 OK LOGOUT completed 25 Connection closed by foreign host. 26 [alex@shadrach alex]$ mail -f testbox 27 Mail version 8.1 6/6/93. Type ? for help. 28 "testbox": 2 messages 29 > 1 MAILER-DAEMON@shadra Mon Sep 12 19:11 12/516 "DON'T DELETE THIS MES" 30 2 alex@shadrach.smallo Mon Sep 12 19:11 8/128 31 & 2 32 Message 2: 33 From alex@shadrach.smallorg.org Mon Sep 12 19:11:18 1999 -0500 34 35 This is a test message 36 Status: RO 37 X-Status: 38 X-Keywords: 39 X-UID: 1 40 41 & q 42 [alex@shadrach alex]$Листинг 7.10. Пример сеанса IMAP с применением команды APPEND.
В строке 8 пользователь alex создает специально для тестирования новый почтовый ящик. В строке 10 начинается работа команды APPEND. Добавляемое сообщение обозначается флагом как прочитанное. Флагом не помечаются только те сообщения, в конце которых отсутствует завершающая пустая строка CR-LF. В нашем примере пользователь alex использовал простейшее сообщение. Далее, после нажатия клавиши Enter сервер IMAP ответил положительно и "попросил" пользователя ввести "аргумент" для команды APPEND в строке 11. Пользователь в ответ на это приглашение набрал сообщение. Далее, как видите, сообщение было успешно добавлено в почтовый ящик клиента. В строке 14 для активизации почтового ящика testbox пользователь задал команду SELECT. Ответ сервера на команду SELECT дает нам дополнительную пищу для размышлений. Обратите внимание: в строке 15 говорится о том, что в почтовом ящике имеется одно новое сообщение, а в строке 16 оно обозначено флагом как "новое". Однако команда SELECT не дает пользователю увидеть UID непрочитанного сообщения, поэтому все сообщения в ящике обозначаются флагом как "прочитанные". Это соответствует тому, что мы говорили о команде APPEND. Как видите, пользователь alex применил флаг \SEEN для добавляемого сообщения. Чтобы окончательно удостовериться в том, что сообщение добавлено, пользователь alex завершает сеанс работы с сервером IMAP и с помощью программы для чтения почты в ОС Linux обращается к своему почтовому ящику testbox. Это показано в строке 26, где пользователь alex выдает команду на чтение почты из ящика mail -f testbox. В строке 30 показано, что в почтовом ящике имеется сообщение, тема которого не указана. Отобразив это сообщение на экране, мы видим, что это именно то сообщение, которое было послано с помощью команды APPEND. Было бы это сообщение реальным, пришедшим от удаленного пользователя или созданным с помощью программы для чтения почты пользователя alex, все равно оно должно иметь стандартный вид, соответствующий RFC 822, только тогда сервер IMAP сможет обработать его определенным образом.
Команда CHECK
Команда CHECK используется для установки контрольной точки в почтовом ящике. Любые операции, такие, например, как запись данных из памяти сервера на его жесткий диск, должны выполняться при соответствующем состоянии почтового ящика. Именно для проверки целостности почтового ящика после дисковых и других подобных им операций и применяется команда CHECK. Эта команда используется без параметров.
Команда CLOSE
Команда CLOSE полностью соответствует своему названию — она закрывает почтовый ящик. Когда почтовый ящик закрыт, то все сообщения, помеченные флагом \DELETED, физически удаляются из него. Действие команды CLOSE четко прослеживается на только что открытом новом почтовом ящике. Открытый почтовый ящик закрывается также с помощью команды LOGOUT (о ней мы поговорим позже). Команда CLOSE не имеет параметров.