8.3.1 Модель протокола

События работы SMTP протокола:

    Клиент инициирует соединение с сервером Клиент посылает запросы на обслуживание Сервер отвечает на эти запросы

Модель протокола SMTP

8.3.2 Последовательность команд SMTP

Протокол SMTP оговаривает последовательность SMTP-команд

Рассмотрим пример:

Некий Vasy абонент сервера kstu. ru, посылает письма трем абонентам сервера kazan. ru (Pety, Koly, Dima) одно письмо.

Рассмотрим листинг передачи сервера kstu. ru серверу kazan. ru:

R - сервер (receive)

S - клиент (send)


R 220 kazan. ru Simple Mail Transfer Service Ready // код ответа 220 (соединение установлено), сервер kstu. ru, протокол SMTP
S HELO kstu. ru // Соединение установлено, "Я kstu. ru", идентификация производится по kstu. ru
R 250 kazan. ru // команда принята и обработана, идентификация прошла
S MAIL FROM: <*****@***ru> // Начало почтовой транзакции, обратный адрес *****@***ru.
R 250 OK // Сервер согласен принять сообщение от *****@***ru
S RCPT TO:<*****@***ru> // Кому отправить письмо, *****@***ru
R 250 OK // Сервер согласен принять сообщение для *****@***ru
S RCPT TO:<*****@***ru> // Еще кому отправить письмо, *****@***ru
R 550 No such user here // Сервер выдает ошибку 550, сообщая, что такого пользователя нет
S RCPT TO:<*****@***ru> // Еще кому отправить письмо, *****@***ru
R 250 OK // Сервер согласен принять сообщение для *****@***ru
S DATA // Запрос на передачу данных
R 354 Start mail input; end with <CRLF>.<CRLF> // Разрешение передачи данных, последняя строка должна содержать "точку"
S From: <*****@***ru> //Текст сообщения (включая заголовок)...
S To: <*****@***knc. ru>
S Subject: С новым годом!
S Mime-Version: 1.0
S X-Mailer: mPOP Web-Mail 2.19
S Date: Fri, 19 Sep 2003 08:37:43 +0400
S Reply-To: <*****@***ru>
S Content-Type: text/plain; charset=koi8-r
S Content-Transfer-Encoding: 8bit
S Message-Id: <*****@***ru>
S
S С новым годом Петя!
S. // Конец сообщения, клиент послал точку
R 250 OK // Сервер получил данные
S QUIT // Клиент делает запрос на закрытие соединения
R 221 kazan. ru Service closing transmission channel // Сервер закрывает соединение

НЕ нашли? Не то? Что вы ищете?

8.3.3 Некоторые команды SMTP

Обязательные команды (команды которые должны присутствовать всегда)

HELO - Открытие сеанса связи (hello).

MAIL - Начинает почтовую транзакцию, которая завершается передачей данных в один или несколько почтовых ящиков (mail).

RCPT - Идентифицирует получателя почтового сообщения (recipient).

Небязательные команды

DATA - Строки, следующие за этой командой, рассматриваются получателем как данные почтового сообщения. В случае SMTP, почтовое сообщение заканчивается комбинацией символов: CRLF-точка-CRLF.

RSET - Прерывает текущую почтовую транзакцию (reset).

NOOP - Требует от получателя не предпринимать никаких действий, а только выдать ответ ОК. Используется главным образом для тестирования.(No operation).

QUIT - Закрытие сеанса связи.

VRFY - Требует от приемника подтвердить, что ее аргумент является действительным именем пользователя.

SEND - Начинает почтовую транзакцию, доставляющую данные на один или несколько терминалов (а не в почтовый ящик).

SOML - Начинает транзакцию MAIL или SEND, доставляющую данные на один или несколько терминалов или в почтовые ящики.

SAML - Начинает транзакцию MAIL и SEND, доставляющие данные на один или несколько терминалов и в почтовые ящики.

EXPN - Команда SMTP-приемнику подтвердить, действительно ли аргумент является адресом почтовой рассылки и если да, вернуть адрес получателя сообщения (expand).

HELP - Команда SMTP-приемнику вернуть сообщение-справку о его командах.

TURN - Команда SMTP-приемнику либо сказать ОК и поменяться ролями, то есть стать STMP - передатчиком, либо послать сообщение-отказ и остаться в роли SMTP-приемника.

8.3.4 Синтаксис некоторых команд SMTP

Команды, MAIL, SEND, SOML и SAML, имеют одинаковый синтаксис:

MAIL <пробел> FROM:<reverse-path> <carriage-return line-feed>

где:

<reverse path> (обратный адрес) указывает серверу, кому в случае ошибки отослать сообщение.

<carriage-return line-feed> (CRLF) возврат каретки.

Примечание: Команды SEND, SOML и SAML дополнительны и используются довольно редко.

Синтаксис RCPT похож на синтаксис команды MAIL:

RCPT <пробел> TO:<forward-path> <CRLF>

Однако, в отличие от MAIL, аргумент RCPT начинается со слова <ТО:>.

8.3.5 Некоторые коды ответов SMTP

Каждая цифра в коде ответа имеет определенный смысл. Первая цифра означает, было ли выполнение команды успешно (2), неуспешно (5) или еще не закончилось (3). Как указано в приложении Е документа RFC 821, простой SMTP-клиент может анализировать только первую цифру в ответе сервера, и на основании ее продолжать свои действия. Вторая и третья цифры кода ответа разъясняют значение первой. Если вы разрабатываете SMTP-приложение, обязательно изучите конструкцию всех кодов SMTP-ответа.


211 Ответ о состоянии системы или помощь
214 Сообщение-подсказка (помощь)
220 <имя_домена> служба готова к работе
221 <имя_домена> служба закрывает канал связи
250 Запрошенное действие почтовой транзакции успешно завершилось
251 Данный адресат не является местным; сообщение будет передано по маршруту <forward-path>
354 Начинай передачу сообщения. Сообщение заканчивается комбинацией CRLF-точка-CRLF
421 <имя_домена> служба недоступна; соединение закрывается
450 Запрошенная команда почтовой транзакции не выполнена, так как почтовый ящик недоступен
451 Запрошенная команда не выполнена; произошла локальная ошибка при обработке сообщения
452 Запрошенная команда не выполнена; системе не хватило ресурсов
500 Синтаксическая ошибка в тексте команды; команда не опознана
501 Синтаксическая ошибка в аргументах или параметрах команды
502 Данная команда не реализована
503 Неверная последовательность команд
504 У данной команды не может быть аргументов
550 Запрошенная команда не выполнена, так как почтовый ящик недоступен
551 Данный адресат не является местным; попробуйте передать сообщение по маршруту <forward-path>
552 Запрошенная команда почтовой транзакции прервана; дисковое пространство, доступное системе, переполнилось
553 Запрошенная команда не выполнена; указано недопустимое имя почтового ящика
554 Транзакция не выполнена

8.3.6 Ретрансляция сообщений

Можно использовать промежуточные сервера для доставки почты получателю.

Пример:

передадим сообщение от *****@***ru через хосты @kstu. ru, @mail. ru получателю *****@***ru

Механизм ретрансляции:

    сообщение передается хосту @kstu. ru
    S MAIL FROM:<*****@***ru>
    S RCPT TO:<@kstu. ru, @mail. ru, *****@***ru> сообщение передается хосту @mail. ru
    S MAIL FROM:<@kstu. ru>
    S RCPT TO:<@mail. ru, *****@***ru> ообщение передается хосту kazan. ru
    S MAIL FROM:<@mail. ru>
    S RCPT TO:<*****@***ru>

При этом параметры To, From и Cc остаются без изменений.

8.3.7 Резервные почтовые серверы (relay)

В случае если основой сервер не доступен, почта может быть отправлена на резервный, который задается в записях MX (DNS). Резервный сервер хранит почту (клиент ее получить не может) до тех пор, пока не заработает основной сервер, как только основной заработает, резервный передает всю накопившеюся почту. Резервных серверов может быть достаточно много. Как правила несколько разных серверов являются резервными по отношению к друг другу.

Когда основной сервер не доступен, почта передается на резервный,
когда основной сервер становится доступен, резервный передает почту основному.

8.3.8 Отправка сообщения на SMTP с помощью Telnet

Отправим письмо через Telnet.

Клиенту необходимо ввести следующие строки:


HELO
MAIL FROM: <*****@***knc. ru>
RCPT TO: <*****@***knc. ru>
DATA
DATE: 27-Oct-2003 12:48:32
FROM: Влад Богомолов <*****@***knc. ru>
SUBJECT: С новым годом!
To: <*****@***knc. ru>

С новым годом!
Влад!
.

Подключение и отправка письма telnet'ом (UNIX) на сервер SMTP (Дионис)

Подключение и отправка письма telnet'ом (Windows) к серверу SMTP (Дионис)

Подключение и отправка письма telnet'ом (UNIX) к серверу SMTP-Sendmail 8.12.8 (UNIX)


Из за большого объема этот материал размещен на нескольких страницах:
1 2