E-mail

POP3

Исторически, почтовый ящик 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

Минимальный набор 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, прекращает обмен почтой.