Исторически, почтовый ящик e-mail представлял из себя файл, в котором последовательно хранились письма в формате "Шапка", пустая строка, текст письма. Протокол POP3 предназначен для работы именно с таким форматом почтового ящика. В частности, удаление писем из середины файла это трудоёмкая операция, поэтому она откладывается на конец сеанса.
Команды клиента посылаются серверу в виде мнемонических текстовых сокращений с параметрами. Сервер отвечает кодом +OK в случае успешного выполнения или –ERR в случае ошибки. За кодом может идти дополнительная текстовая информация в произвольной форме.
После установления TCP соединения POP3-сервер посылает клиенту положительный отклик:
<<<+OK POP3 server ready
Далее клиент должен передать имя и пароль
>>>USER mike
<<<+OK
>>>PASS mypasswd
<<<+OK
После успешной авторизации можно получить список писем. Для каждого письма выдается его размер в байтах. Конец списка - строка, состоящая из одной точки.
>>>LIST
<<<+OK 2 messages (320 octets)
<<<1 120
<<<2 200
<<<.
Получение заголовков сообщения (Если последним параметром указать число N, больше чем ноль то будут выданы N первых строк письма.
>>>TOP 1 0
<<<+OK Message follows
<<<From:bob
<<<To:mike
<<<
<<<.
Чтение сообщения по номеру
>>>RETR 1
<<<+OK Message follows
<<<From:bob
<<<To:mike
<<<...
<<<...
<<< .
Пометка сообщений для удаления (удаление произойдёт при завершении сеанса)
>>>DELE 1
<<<+OK message 1 deleted
>>>DELE 2
<<<-ERR message 2 already deleted
Завершение сеанса и окончательное удаление стёртых писем
>>>QUIT
<<<+OK
Минимальный набор SMTP команд: HELO, MAIL, RCPT, DATA и QUIT. Сервер отвечает трехзначной комбинацией цифр, называемой кодом ответа. Вместе с кодом ответа, как правило, передается одна или несколько строк текстовой информации. Первая цифра кода ответа означает, было ли выполнение команды успешно 2
, неуспешно 4
и 5
или еще не закончилось 3
.
Знаками >>> выделены команды клиента, а знаком <<< сервера. Проверить работу протокола можно командами telnet
или netcat
telnet mxs.mail.ru 25
<<<220 mxs.mail.ru ESMTP ready
Клиент осуществляет подключение к TCP порту 25, после чего ожидает приветственного сообщения с кодом 220 от сервера. Ответ сервера обязательно должен начинаться с полного доменного имени сервера: mxs.mail.ru в данном примере. В остальных командах возвращается необязательный текст в произвольной форме.
>>>HELO client.example.com
<<<250 mxs.mail.ru
Клиент идентифицирует себя посылкой команды HELO. В качестве аргумента указывается имя клиента: client.example.com. На этом этапе могут быть отвергнуты клиенты с именами, отсутсвующими в DNS.
>>>MAIL From:<user@example.com>
<<<250 sender OK
Команда MAIL идентифицирует автора сообщения. На этом этапе сервером может выполняться блокировка нежелательных отправителей.
>>>RCPT To:<user@mail.ru>
<<<250 recipient ОК
RCPT, идентифицирует получателя. Если сообщение предназначено нескольким получателям, может быть исполнено несколько команд RCPT. Сервер может проверять имя и домен получателя и отвергать их, в случае если указанный адрес не обслуживается сервером.
>>> DATA
<<<354 Enter mail, end with "." on a line by itself
>>>From: "Example user" <user@example.com>
>>>To: Test users
>>>Subject: Do not reply
>>>
>>>Test
>>> .
<<<250 Mail accepted
Клиент отправляет содержимое почтового сообщения с использованием команды DATA. Строка, содержащая только точку, указывает на конец сообщения.
>>>QUIT
<<<221 Bye
Команда, QUIT, прекращает обмен почтой.