Опубликован: 21.11.2006 | Доступ: свободный | Студентов: 1811 / 140 | Оценка: 4.09 / 4.00 | Длительность: 38:34:00
Лекция 7:

Протокол IMAP

Команда STATUS

Команда STATUS используется для формирования запроса о текущем состоянии почтового ящика. Первым параметром для этой команды является имя почтового ящика, к которому она применяется. Второй параметр — это список пунктов, по которым клиент может получить информацию (она заключается в круглые скобки () ). Команда STATUS может использоваться отдельно для получения информации о состоянии почтового ящика без его открытия с помощью команд SELECT или EXAMINE.

Список критериев, по которым команда STATUS может выдавать информацию, представлен в табл. 7.2.

Таблица 7.2. Список критериев, по которым команда STATUS выдает информацию
Критерий Описание
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 не имеет параметров.