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

Протокол POP3

Команды клиента POP3

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

Команда STAT

В команде STAT дополнительные параметры не задаются. Она применяется для получения текущего листинга работы сервера POP3. Текущий листинг представляет собой форматированный текст, который отображает текущее состояние почтового ящика пользователя. Строка вывода при этом имеет формат:

+ОК nn mm

Формат ответа на команду STAT является стандартным. С его помощью пользователи системы электронной почты получат информацию о состоянии своих почтовых ящиков. Значение nn указывает, какое количество сообщений находится в данный момент в почтовом ящике пользователя. Сообщения с пометкой "удалено" не считаются, однако учитываются уже прочитанные сообщения. Значение mm отражает объем сообщений, находящихся в ящике пользователя, в байтах. Команда STAT часто используется для быстрой проверки состояния почтового ящика клиентскими программами для работы с почтой. Выдав команду STAT, программа для работы с электронной почтой может сравнить количество сообщений в почтовом ящике с тем, что было получено в результате последней проверки. Если они отличаются, то программа для работы с электронной почтой может инициировать процесс получения новых сообщений. Единственная проблема, возникающая при использовании этого алгоритма, заключается в том, что программе-клиенту не известно, сколько сообщений было получено в прошлый раз и какие из них не были удалены.

Команда LIST

Команда LIST используется для получения развернутого листинга почтового ящика. Развернутый листинг представляет собой краткое содержание почтового ящика, включая номер и объем сообщения в байтах. Когда команда LIST задается без параметров, то отображается развернутый листинг всех сообщений в почтовом ящике. Если же использовать в качестве параметров команды номер сообщения, то развернутый листинг будет производиться только для него. Пример сеанса работы команды LIST представлен в листинге 6.6.

1 [alex@shadrach alex]$ telnet localhost 110
2 Trying 127.0.0.1 ...
3 Connected to localhost.
4 Escape character is '^]'.
5 +OK POP3 localhost v6.50 server ready
6 USER alex
7 +OK User name accepted, password please
8 PASS tarzan
9 +OK Mailbox open, 2 messages
10 LIST
11 +OK Mailbox scan listing follows
12 1 355
13 2 465
14 .
15 LIST 1
16 +OK 1 355
17 LIST 2
18 +OK 2 465
19 LIST 3
20 -ERR No such message
21 QUIT
22 +OK Sayonara
23 Connection closed by foreign host.
24 [alex@shadracn alex]$
Листинг 6.6. Пример работы команды LIST

Давайте рассмотрим, что происходит. В строке 10 клиент выдает серверу команду LIST без параметров. Ответ сервера заключается в строках 12–14 с уведомлением в строке 11 о том, что команда опознана. Строки 12 и 13 обозначают сообщения, которые находятся в почтовом ящике. Некоторые реализации серверов POP3 включают в положительный ответ сервера результаты выполнения команды STAT в качестве обобщающего сообщения. Однако программам-клиентам не стоит полагаться на эти сведения (как показано в данном листинге). В строках 15 и 17 выдается команда LIST для каждого сообщения. Соответствующие ответы сервера показаны в строках 16 и 18. В строке 19 клиент задает команду LIST для несуществующего сообщения. В 20-й строке сервер возвращает отрицательный ответ на это действие.

Команда RETR

Команда RETR используется для получения сообщений из почтового ящика на компьютер клиента. Параметр, который можно использовать с этой командой, — это номер сообщения, полученный с помощью команды LIST. Если имеется сообщение с заданным номером, то сервер будет отвечать позитивным сообщением, завершая текст письма специальным символом (одной точкой в последней строке). Почтовое сообщение, которое отдается клиенту, должно быть форматировано в соответствии с RFC 822 так же, как оно было принято почтовым сервером (чаще всего SMTP). Сервер POP3 не принимает никакого участия в форматировании и манипулировании сообщением. Работа сервера POP3 заключается лишь в передаче сообщения клиенту в целости и сохранности. Пример работы команды RETR показан в листинге 6.7.

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 v6.50 server ready
6 USER rich
7 +OK User name accepted, password please
8 PASS guitar
9 +OK Mailbox open, 2 messages
10 LIST
11 +OK Mailbox scan listing follows
12 1 355
13 2 465
14 .
15 RETR 1
16 +OK 355 octets
17 Return-Path: <rich>
18 Received: (from rich@localhost)
19 by shadrach.smallorg.org (8.8.7/8.8.7) id KAA00648
20 for rich; Thu, 2 Sep 1999 10:15:25 -0500
21 Date: Thu, 2 Sep 1999 10:15:25 -0500
22 From: rich@shadrach.smallorg.org
23 Message-Id: <199909021515.KAA00648@shadrach.smallorg.org>
24 To: rich@shadrach.smallorg.org
25 Subject: Message 1
26 Status: 0
27
28 This is test message 1
29 .
30 QUIT
31 +OK Sayonara
32 Connection closed by foreign host.
33 [rich@shadrach rich]$
Листинг 6.7. Пример применения команды RETR

В строке 15 клиент выдает команду RETR для получения из ящика сообщения с номером 1. Строки 16–27 показывают, что сообщение полностью передается клиенту. В обязанности клиента входит организация буфера, достаточного для хранения сообщения (с этой целью команда LIST и выдает сведения об объеме сообщений).