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

Протокол IMAP

Команда EXPUNGE

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

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 select newbox
9 * 6 EXISTS
10 * 0 RECENT
11 * OK [UIDVAHDITY 937243866] DID validity status
12 * OK [UIDNEXT 8] Predicted next UID
13 * FLAGS (\Answered \Flagged \Deleted \Draft \Seen)
14 * OK [PERMANENTFLAGS (\* \Answered \Flagged \Deleted \Draft VSeen)] Permanent flags
15 * OK [UNSEEN 1] first unseen message in /home/alex/newbox
16 a2 OK [READ-WRITE] 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 [alex@shadrach alex]$
Листинг 7.11. Пример сеанса IMAP с применением команды EXPUNGE

В строке 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 [CHARSET specification] (search criteria)

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

Таблица 7.3. Критерии поиска для команды SEARCH
Критерий поиска Описание
<message set> Сообщения с номерами, соответствующими заданному диапазону
ALL Все сообщения в почтовом ящике
ANSWERED Сообщения с флагом \ANSWERED
BCC <string> Сообщения, содержащие заданную строку в поле заголовка BCC
BEFORE <date> Сообщения, которые были созданы до указанной даты
BODY Сообщения, содержащие в теле указанную строку
CC <string> Сообщения, содержащие заданную строку в поле заголовка CC
DELETED Сообщения с флагом \DELETED
DRAFT Сообщения с флагом \DRAFT
FLAGGED Сообщения с набором флагов \FLAGGED
From <string> Сообщения, содержащие заданную строку в поле заголовка From
HEADER <field name> <STRING> Сообщения, содержащие указанный заголовок с заданной в нем строкой
KEYWORD <flag> Сообщения, содержащие указанный список критериев
LARGER <n> Сообщения, размер которых больше n
NEW Сообщения с флагом \RECENT, но без флага \SEEN
NOT <search key> Сообщения, не содержащие указанный список критериев
OLD Сообщения без флага \RECENT
ON <date> Сообщения, которые были созданы в указанный день
OR <searchkey 1> <searchkey 2> Сообщения, содержащие логические критерии поиска ИЛИ
RECENT Сообщения с флагом \RECENT
SEEN Сообщения с флагом \SEEN
SENTBEFORE <date> Сообщения, которые были созданы до указанной даты, согласно полю заголовка Date
SENTON <date> Сообщения, которые были созданы в указанную дату, согласно полю заголовка Date
SENTSINCE <date> Сообщения, которые были созданы после указанной даты, согласно полю заголовка Date
SINCE <date> Сообщения, которые были созданы после указанной даты
SMALLER <n> Сообщения, размер которых не превышает n
TEXT <string> Сообщения, которые содержат указанную строку или в заголовках, или в теле сообщения
UID <message set> Сообщения с UID, соответствующими заданному диапазону
UNANSWERED Сообщения без флага \ANSWERED
UNDELETED Сообщения без флага \DELETED
UNDRAFT Сообщения без флага \DRAFT
UNFLAGGED Сообщения без набора флагов \FLAGGED
UNKEYWORD <flag> Сообщения без набора заданных критериев
UNSEEN Сообщения без флага \SEEN

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

1 [alex@shadrach alex]$ 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 [UIDVALIDITY 936999597] UID validity status
12 * OK [UIDNEXT 5] Predicted next UID
13 * FLAGS (\Answered \Flagged \Deleted \Draft \Seen)
14 * OK [PERMANENTFLAGS (\* \Answered \Flagged \Deleted \Draft \Seen)] Permanent fs
15 * OK [UNSEEN 1] first unseen message in /var/spool/mail/alex
16 a2 OK [READ-WRITE] 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 [alex@shadrach alex]$
Листинг 7.12. Пример сеанса IMAP с применением команды SEARCH

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

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