Подробное описание протокола почтового отделения POP3

POP (Post Office Protocol) — протокол почтового отделения. Это достаточно старый протокол, первая версия появилась в 1984 году, в следующем году вышла вторая версия протокола, и вскоре после этого, появилась третья версия в 1988 году. В 1996 году протокол POP3 был расширен новыми механизмами аутентификации, а также так называемыми расширениями, которые позволяли добавлять в протокол новые команды.

Сейчас используется третья версия протокола POP, а первая и вторая считаются устаревшими.
Протокол РОР3 используется для чтения почты, предназначен для конкретного пользователя из хранилища сообщений. Письма в хранилище доставляются по протоколу SMTP. 

архитектура pop3

Подход «загрузить и удалить»

Протокол РОР3 работает по модели “загрузить и удалить”. Согласно этой модели почтовый ящик на сервере является лишь временным хранилищем информации. Постоянно письма хранятся только на компьютерах клиента. Поэтому все письма, должны быть переписаны на клиент и работа с ними происходит только на клиенте. После загрузки письма, его необходимо удалить с сервера, так как протокол РОР3 не позволяет узнать загружали это письмо раньше или нет.

Преимущества POP3

Преимущество РОР3 заключается в том, что это очень простой протокол, а также то, что Ваши письма доступны вам даже, если у вас нет подключения к интернету.

Недостатки протокола

Существенным недостатком РОР3 является возможность работы только одного почтового клиента, который удаляет все письма, после того, как загрузил себе, хотя некоторые современные реализации серверов РОР3 позволяют сохранять сообщения, даже после того, как они были прочитаны, но в этом случае мы не можем определить на сервер пришло новое письмо или мы его уже читали.

Другим недостатком является то, что РОР3 считает почтовый ящик единым хранилищем писем. Нет возможности создавать папки, настраивать фильтры, чтобы сообщения автоматический попадали в эти папки, как то помечать письма и выполнять другие подобные действия. В протоколе РОР3 все это можно делать только средствами почтового клиента.

Место в стеке TCP/IP

В стеке протоколов TCP/IP протокол РОР3 находится на Прикладном уровне.

Место pop3 в tcp

РОР3 использует протокол TCP и 110 порт. При работе по протоколу РОР3 клиент проходит через три состояния:

  • Первое состояние это Авторизация, клиент должен указать имя пользователя и подтвердить, что он тот, за кого себя выдает. Чаще всего для этого используется пароль.
  • Если авторизация прошла успешно, клиент переходит на стадию Транзакции. На этой стадии клиент загружает письма сервера и помечает письма, которые он загрузил на удаление. Однако реально сообщения не удаляются.
  • Удаления сообщений происходит на стадии обновления. Клиент говорит серверу, что он выполнил все полезные действия и готов отключится, только после этого сервер удаляет помеченные сообщения и закрывает соединение. Это сделано для того чтобы не потерять письма в результате сбоя в работе почтового клиента. Клиент переходит на стадию обновления, только после того как убедиться, что все сообщения загружены и их можно безопасно удалять с сервера. Если в процессе загрузки произошла ошибка в работе клиента, то сервер  не будет удалять помеченное сообщение и их можно будет загрузить в следующий раз.

Протокол РОР3 также как и многие другие протоколы прикладного уровня, например SMTP  или HTTP, работают в текстовом режиме, также как в SMTP взаимодействие происходит в режиме запрос-ответ, при этом клиент и сервер пересылают друг другу обычные текстовые строки. Каких- либо специальных форматов пакетов не используется.

Команды POP3

Рассмотрим команды протокола РОР3. Команды USER и PASS используются на стадии авторизации, для того чтобы указать имя пользователя к почтовому ящику, к которому мы хотим подключиться и ввести пароль для защиты от несанкционированного доступа.

Команды POP3

Следующие команды STAT, LIST, RERT, TOP, DELE выполняются на стадии транзакции, их выполнение возможно только, если стадия авторизации прошла успешно.

  • Команда STAT показывает общие количество писем на почтовым сервере.
  • Команда LIST показывает информацию о сообщениях, без параметров  и показывает информацию обо всех сообщениях. А если указать номер конкретного сообщения, то выдается информацию только о нем.
  • Команда RERT служит для передачи сообщения с сервера на клиент, этой команде необходимо указать номер сообщения, которые мы хотим загрузить.
  • Команда TOP, которая похожа на команду RERT, но передает не полностью все сообщения, а только заголовки. Команде TOP, также необходимо указать номер сообщения, заголовки, которого мы хотим загрузить, а также необязательный второй параметр, который содержит количество  строк основного письма. Например, 10 если второй аргумент не указать, то будут загружены только заголовки, а из основной части письма передаваться ничего не будет.
  • Команда DELE используется для того, чтобы пометить на удаление сообщение  которые были загружены командой RERT.
  • Команда QUIT служит для завершения стадии транзакции и переход на стадию обновление. Выполняя команду QUIT клиент подтверждает, что все необходимые сообщения загружены на клиент, и те сообщения, которые помечены на удаление могут быть безопасно удалены с сервера. После выполнения команды QUIT соединение разрывается.

Ответы POP3

В РОР3 всего лишь 2 варианта ответа на команды:

  • ответ +ОК свидетельствует об успешном завершении команды.
  • ответ -ERR говорит о том произошла ошибка. Также как в протоколах SMTP  и HTTP после статуса ответа может следовать какое-то текстовое сообщение, которое предназначено для людей, а не автоматической обработки.

Пример сеанса POP3

Рассмотрим пример сеанса загрузки электронной почты по протоколу РОР3.

Пример сеанса pop3

 Мы подключаемся к серверу РОР3 и устанавливаем TCP соединение с портом 110.

+OK Cyrus POP3 server ready  // сервер отвечает сообщением со статусом +ОК сервер РОР3 готов.

USER asozykin // сначала нужно пройти авторизацию, для этого используется команду USER, где указывается имя пользователя.

+OK Name is a valid mailbox // в ответ сервер передает сообщение со статусом +ОК и говорит, что у данного пользователя есть почтовый ящик на этом сервере.

PASS 1234qwer//затем мы передаем пароль с помощью команды PAS.

+OK Mailbox locked and ready // сервер отвечает сообщением со статусом +ОК команда выполнена успешно, почтовый ящик заблокирован и готов для работы.

Мы помним, что протокол РОР3 рассчитан на работу только с одним клиентом, поэтому после того, как мы прошли стадию авторизации, почтовый ящик блокируется, и никакой другой клиент не может подключиться, пока мы не выйдем из соединения с помощью QUIT.

STAT //после успешной авторизации, начинается стадия транзакции. Сначала мы хотим узнать, сколько всего сообщений в ящике, для этого используется команда STAT.  

+ОК 311 141957394 // Сервер отвечает сообщением  +ОК команда выполнена успешно, писем в ящике 311, общий размер почтового ящика в байтах.

LIST //  затем мы получаем список всех сообщений с помощью команды LIST, команда LIST вывод перечень сообщений

+OK scan listing follows

1 61960 // указывается номер сообщения и его размер.
2 2938 // здесь указана информация только о 2 письмах, на самом деле в выводе информация о 311 письмах.

. // и завершается вывод командой LIST точкой.

RETR 1  //После того, как мы узнали сколько у нас есть сообщений и какой их размер, мы можем загрузить их на клиент. Для этого используется команда RETR указываем номер сообщения, который хотим загрузить.

+OK message follow // Сервер отвечает сообщением  +ОК
…  // и передает письмо

DELE 1 // после того, как сообщение загружено, мы можем пометить его на удаление с помощью команды DELE

+OK marked deleted  // в ответ сервер выдает сообщение +ОК команда выполнена успешно, сообщение помечено на удаление. Таким образом мы можем загрузить оставшиеся 310 сообщений.

QUIT // после того, как мы загрузим все письма которые нам нужны, мы выдаем команду QUIT  на этом стадия транзакции заканчивается и начинается стадия обновления.

+OK Connection closed // сообщения которое помечены на удаление, удаляются и сервер разрывает соединение.

Заключение

Рассмотрели прокол РОР3 Post Office Protocol версии 3 — протокол почтового отделения. Этот протокол используется для чтения электронной почты  из почтового ящика пользователя.

Протокол использует подход “загрузить и удалить”, при этом считается что почтовый ящик на сервере это только временное хранилище сообщений их необходимо загрузить на почтовый клиент для работы в оффлайн режиме.

Следствием такого подхода является возможность работы только одного клиента, который загружает сообщения себе и сразу удаляет после загрузки. Именно такой подход работы с электронной почтой был популярный 80-е и 90-е годы.

Электронную почту читали с одного компьютера, подключение к сети было не стабильным и часто дорогим. Однако сейчас у нас совершенно другая схема взаимодействие с электронной почтой, как правило сейчас используется несколько почтовых клиентов, на компьютере, на планшете, на смартфоне, а также различные VP(10 38) версии почтовых клиентов и мы хотели бы иметь доступ к своему почтовому ящику одновременно со всех почтовых клиентов.   

С помощью средств протокола РОР3  этого сделать невозможно, поэтому на замену РОР3 был придуман новый протокол IMAP. В этом протоколе электронная почта постоянно хранится на сервере вместо загрузки на клиент. И поддерживается одновременная работа нескольких почтовых клиентов.

Ссылка на основную публикацию