Отправка почты
Отправка почты осуществляется по протоколу
SMTP (Simple Mail Transfer Protocol), который тоже использует понятные текстовые команды. Подключение к SMTP-серверу осуществляется аналогичным образом, только для соединения используется
25 порт. Но ответы сервера имеют другой формат, который кодируется 3-значным числом. Каждая цифра в коде ответа несет определённый смысл. Первая цифра означает, было ли выполнение команды успешно (2), неуспешно (5) или еще не закончилось (3). Вторая цифра показывает категорию ошибки, а третья идентифицирует конкретную ошибку. Основные коды, которые нам понадобятся – это:
220 (SMTP-сервер готов к работе);
250 (успешное завершение действия);
354 (ожидание ввода текста письма) и
221 (закрытие сессии).
После установления соединения SMTP-сервер представляется нам (220 код). Логично, что мы должны также представиться ему. Для этого используется команда
HELO. Единственным её аргументом является имя Вашего компьютера. То есть Вы говорите: “Привет, я – test.kirov.ru”.
220-proxy.kirov.ru ESMTP Sendmail 8.12.6/8.12.6; Mon, 14 Jun 2004 12:00:00 +0300 (MSK)
220-Use of this system for the delivery of UCE (a.k.a. SPAM), or any other 220-message without the express permission of the system owner is prohibited.
220 Use of this system for third party relaying is prohibited.HELO test.kirov.ru
250 proxy.kirov.ru Hello test.kirov.ru [167.15.230.25], pleased to meet you
В ответ сервер должен выдать код 250, сообщая о том, что команда принята и обработана. Следующим шагом мы должны указать обратный адрес, на который письмо вернётся в случае неудачи. Делается это при помощи команды
MAIL FROM:
MAIL FROM:
[email protected]
250 Ok
Далее необходимо указать получателя сообщения. Для этого используем команду
RCPT TO:. Если получателей несколько, то команда RCPT вводится несколько раз.
RCPT TO:<
[email protected]
>250 Ok RCPT TO:<
[email protected]
>550 Unknown user RCPT TO:<
[email protected]
>250 Ok
После того как введены все RCPT, можно начинать передачу данных при помощи команды
DATA.
DATA
354 Enter mail, end with "." on a line by itself
Сервер отвечает кодом 354, сигнализируя, что передача данных разрешена, и подсказывает, что конец передачи письма кодируется строкой, состоящей из одного только символа – точки. При успешном приеме тела письма сервер выдаст код 250.
DATA
354 send the mail data, end with .To:
[email protected]
From:
[email protected]
Subject: Письмо
Первая строка письма
Вторая строка письма
Третья строка письма
Последняя строка письма
.
250 Ok QUIT
221 Bye
Завершается почтовая сессия, как и в протоколе POP3, командой
QUIT. Сервер в свою очередь, отвечает кодом 221. Этот код подтверждает клиенту, что соединение будет закрыто, после чего соединение действительно закрывается.
Вот пример полной почтовой SMTP-сессии:
220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready
HELO USC-ISIF.ARPA250 BBN-UNIX.ARPA
MAIL FROM:<
[email protected]
>250 OK
RCPT TO:<
[email protected]
>250 OK
RCPT TO:<
[email protected]
>550 No such user here
RCPT TO:<
[email protected]
>250 OK
DATA
354 Start mail input; end with <CRLF>.<CRLF>
To:
[email protected]
From:
[email protected]
Subject: Test Hi!This is a test message..
250 OK
QUIT
221 BBN-UNIX.ARPA Service closing transmission channel