Существует два варианта протокола почтовой службы: РОР2 и РОРЗ. РОР2, определение которого дается в документе RFC 937, работает через порт 109, а РОРЗ, определенный в документе RFC 1725, через порт 110. Несмотря на общую базовую функциональность протоколы являются несовместимыми и в работе используют различные наборы команд. Протоколы POP проверяют регистрационное имя пользователя и пароль, а затем перемещают почту пользователя с сервера в почтовый ящик локальной пользовательской программы для чтения почты. РОР2 уже практически вышел из употребления, поэтому наше внимание будет сосредоточено на РОРЗ.
Проиллюстрируем работу POP-протокола на примере сеанса РОРЗ. РОРЗ - это простой протокол запросов/ответов; как и в случае SMTP, команды РОРЗ можно передавать напрямую через широко известный порт (110) и немедленно получать результаты. В данном примере ввод пользователя выделен жирным шрифтом:
% telnet crab 110 Trying 172.16.12.1 ... Connected to crab.wrotethebook.com. Escape character is *"]'. +0K crab P0P3 Server Process 3.3(1) at Mon 16-Apr-2001 4:48PM-EDT USER hunt +0K User name (hunt) ok. Password, please. PASS Watts?Watt? +0K 3 messages in folder NEWMAIL (V3.3 Rev B04) STAT +0K 3 459 RETR 1 +0K 146 octets ...The full text of message I... DELE 1 +0K message # 1 deleted RETR 2 +0K 155 octets ...The full text of message 2... DELE 2 +0K message # 2 deleted RETR 3 +0K 158 octets ...The full text of message 3... DELE 3 +0K message # 3 deleted QUIT +0K P0P3 crab Server exiting (0 NEWMAIL messages left) Connection closed by foreign host.
Команда USER позволяет указать имя пользователя, а команда PASS - пароль для учетной записи, связанной с почтовым ящиком. (Это те же самые имя и пароль, с помощью которых пользователь подключается к почтовому серверу.) В ответ на команду STAT сервер передает число сообщений в почтовом ящике и общее число байтов, занятых под хранение этих сообщений. В данном примере сервер хранит три сообщения общим объемом в 459 байт. RETR 1 позволяет получить полный текст первого сообщения. DELE 1 удаляет это сообщение с сервера. После извлечения с сервера каждое из сообщений удаляется. Клиент завершает сеанс командой QUIT. Проще некуда! В таблице перечислены все команды РОРЗ.
Команда |
Действие |
USER username |
Указывает имя учетной записи пользователя |
PASS password | Указывает пароль пользователя |
STAT |
Отображает число непрочитанных сообщений и их размер в байтах |
RETR n |
Отображает сообщение с номером n |
DELE n |
Удаляет сообщение с номером n |
LAST |
Отображает номер последнего сообщения, над которым выполнялись действия |
LIST [n] |
Отображает размер сообщения n либо всех сообщений |
RSET |
Восстанавливает все сообщения; сбрасывает номер сообщения в единицу |
TOP n I |
Выводит заголовок и I строк сообщения n |
NOOP |
Пустая команда; не приводит к выполнению действий |
QUIT |
Завершает сеанс РОРЗ |
Аргументом команды извлечения (RETR) или удаления (DELE) служит номер сообщения, что позволяет обрабатывать сообщения в произвольном порядке. Кроме того, нет прямой связи между извлечением и удалением сообщения. Можно удалить сообщение, которое вообще не было прочитано, или оставить на сервере уже прочитанное сообщение. Однако РОР-клиенты обычно не пользуются подобными возможностями. В большинстве случаев содержимое почтового ящика полностью переносится с сервера на клиентскую машину, а затем удаляется с сервера либо продолжает храниться в качестве непрочитанного. Удаление отдельных сообщений на клиентской машине никак не влияет на содержимое почтового ящика на сервере, поскольку все сообщения считаются единым блоком, который либо удаляется, либо сохраняется после передачи клиенту. Клиенты электронной почты, испытывающие необходимость в удаленном управлении почтовым ящиком на сервере, скорее будут использовать протокол IMAP.