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

Протокол POP3

Команда UIDL

Еще одна необязательная для всех серверов POP3 команда — UIDL. Благодаря ей все сообщения, хранящиеся на сервере, получают уникальные номера, которые сохраняются для всех сеансов POP3. Как уже говорилось ранее, сообщения нумеруются по порядку в течение сеанса POP3. По завершении клиентом сеанса и с началом нового сеанса сообщения перенумеровываются. Таким образом, если клиент имел в своем ящике десять сообщений и удалил шестое сообщение в течение сеанса, то при следующем сеансе POP3 девять сообщений будут перенумерованы с первого по девятое. Как видите, у клиентского программного обеспечения довольно непростая задача — следить за перенумерацией сообщений.

Для решения этой проблемы в некоторые серверы POP3 встроена поддержка команды UIDL или "листинг с уникальным идентификатором". Каждому сообщению назначается уникальный идентификатор, который представляет собой строку символов формата ASCII (до 70 символов). Этот идентификатор сохраняется за сообщением все время, пока оно находится в почтовом ящике. Довольно часто идентификатор UIDL для сообщения получают посредством применения алгоритма хеширования к заголовку сообщения. Однако применение такой технологии может привести к тому, что два одинаковых сообщения получат одинаковый UIDL. Клиентское программное обеспечение должно распознавать и устранять такие ситуации. В листинге 6.10 представлен пример вывода на экран и удаления сообщений, идентифицируемых с помощью UIDL.

1 [rich@shadrach rich]$ telnet localhost 110
2 Trying 127.0.0.1...
3 Connected to localhost.
4 Escape character is '^]'.
5 +OK POP3 localhost v7.59 server ready
6 USER rich
7 +OK User name accepted, password please
8 PASS guitar
9 +OK Mailbox open, 3 messages
10 LIST
11 +OK Mailbox scan listing follows
12 1 370
13 2 371
14 3 370
15 .
16 UIDL
17 +OK Unique-ID listing follows
18 1 37cabbcb0000009
19 2 37cabbcb0000000a
20 3 37cabbcb0000000b
21 .
22 DELE 1
23 +OK Message deleted
24 LIST
25 +OK Mailbox scan listing follows
26 2 371
27 3 370
28 .
29 UIDL
30 +OK Unique-ID listing follows
31 2 37cabbcb0000000a
32 3 37cabbcb0000000b
33 .
34 QUIT
35 +OK Sayonara
36 Connection closed by foreign host.
37 [rich@shadrach rich]$ telnet localhost 110
38 Trying 127.0.0.1 ...
39 Connected to localhost.
40 Escape character is '^]'.
41 +OK POP3 localhost v7.59 server ready
42 USER rich
43 +OK User name accepted, password please
44 PASS guitar
45 +OK Mailbox open, 2 messages
46 LIST
47 +OK Mailbox scan listing follows
48 1 371
49 2 370
50 .
51 UIDL
52 +OK Unique-ID listing follows
53 1 37cabbcb0000000a
54 2 37cabbcb0000000b
55 .
56 QUIT
57 +OK Sayonara
58 Connection closed by foreign host.
59 [rich@shadrach rich]$
Листинг 6.10. Пример выполнения команды UIDL

В строке 16 клиентом выдается команда UIDL для отображения уникальных идентификаторов сообщений, которые находятся в почтовом ящике. Строки 17–21 представляют собой ответы сервера с соответствующими уникальными идентификаторами для каждого сообщения. В строке 22 клиент удаляет сообщение с номером 1. Далее из строк 30–33 видно, что оставшиеся UIDL сообщений не изменились. В следующем сеансе POP3 (строки 47–50) мы видим, что сообщения были перенумерованы, но их уникальные идентификаторы UIDL остались неизменными с момента последнего сеанса (строки 52–55). Таким образом, программа-клиент может идентифицировать сообщения независимо от сеансов POP3.

Ответы сервера POP3

Как показано в примерах сеансов POP3, приведенных выше в этой лекции, на каждую команду, посланную клиентом, сервер POP3 возвращает ответ. Формат ответов сервера следующий:

result text

Под result подразумевается код ответа сервера POP3, а text — это текстовое сообщение, которое описывает результаты выполнения той или иной команды.

Сервер POP3 может возвращать ответы двух типов. Ответ с сообщением +ОК означает, что команда была выполнена успешно, а ответ -ERR свидетельствует о том, что команда не была выполнена.

Подробности о выполнении той или иной команды содержатся в текстовой части ответа сервера. Возможны ответы, состоящие из нескольких строк. Конец многострочного ответа обозначается строкой с одной точкой (.).

Реализация POP3 в ОС Linux

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

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

На сегодняшний день наибольшую популярность получил пакет клиента POP3 для ОС Linux под названием fetchmail, написанный Эриком Рэймондом (Eric Raymond). Называть этот пакет программой для работы с POP3 не совсем корректно, так как, помимо функций клиента POP3, он имеет и другие возможности. С помощью этой программы можно получать сообщения из почтового ящика на удаленном сервере с использованием протоколов POP3, IMAP4 или SMTP (посредством команды ETRN ). С ростом популярности протокола POP3, и услуг предлагаемых провайдерами Internet на его основе, программа fetchmail стала практически стандартом для большинства пользователей Linux при работе с серверами POP3. Программа fetchmail автоматически определяет перечень протоколов, которые поддерживаются на удаленном сервере, и выбирает наилучший способ для получения сообщений. Получив сообщение, эта программа сразу же передает его локальному почтовому процессору на сервере с ОС Linux, который доставляет сообщение локальному пользователю.

Одно из преимуществ fetchmail, которое в последнее время все более широко используется, — возможность получения почты для всего домена через один почтовый ящик на узле провайдера Internet. Провайдер при этом должен сконфигурировать свою программу sendmail таким образом, чтобы она пересылала сообщения, адресованные любому пользователю из этого домена, в один почтовый ящик. Например, все сообщения адресованные prez@smallorg.org, viceprez@smallorg.org или janitor@smallorg.org будут перенаправлены на почтовый ящик maildrop@smallorg.org. Затем почтовый сервер на базе ОС Linux, обслуживающий домен smallorg.org, с помощью fetchmail и POP3 получает сообщения из ящика maildrop@smallorg.org. Хотя каждое сообщение помещается в один почтовый ящик, все они имеют разные значения в поле заголовка To: (Кому:) в формате RFC 822 (см. раздел "Форматы сообщений" в "Протокол SMTP" "Протокол SMTP"). Программу fetchmail можно сконфигурировать так, чтобы она рассылала все принятые сообщения в соответствующие локальные почтовые ящики на почтовом сервере на основании значений поля To:. Хотя такой алгоритм стал довольно популярным (особенно на серверах POP3 на базе ОС Windows), мы бы не рекомендовали увлекаться такой практикой, так как при этом может теряться важная информация из заголовка. Лучше всего использовать метод SMTP ETRN, описанный в "Подключение почтового сервера к провайдеру Internet" "Подключение почтового сервера к провайдеру Internet". При этом в сообщениях полностью сохраняются заголовки в формате RFC 822.