Россия, Казань, Казанский Национальный Исследовательский Технический Университет |
Протокол SMTP
Команда RCPT
Команда RCPT определяет получателей сообщения. Одно и то же сообщение могут получать несколько пользователей. Обычно каждый получатель указывается отдельной строкой с командой RCPT. Формат команды RCPT следующий:
RCPT forward-path
Аргумент forward-path определяет, куда направляется электронная почта. Как правило, здесь указывается полный адрес электронной почты, но может также указываться и имя пользователя локального сервера SMTP. Рассмотрим для примера следующую команду:
RCPT TO: haley
С помощью этой команды указывается, что сообщение должно быть направлено пользователю haley на сервер SMTP, который обрабатывает сообщения. Таким же образом можно посылать сообщения и пользователям других компьютеров, которые не являются пользователями сервера SMTP, куда направлено сообщение. Рассмотрим, например, следующую команду:
RCPT TO: riley@meshach.smallorg.org
Команда, направленная серверу SMTP с именем shardrach.smallorg.org, вынуждает принять решение о доставке сообщения именно этот сервер. Так как пользователь не зарегистрирован на локальном сервере shardrach, то серверу придется определить, что делать с сообщением дальше. В этом случае возможны три варианта действий хоста shardrach. Давайте остановимся на них подробнее.
- Хост shardrach может переслать сообщение получателю и возвратить утвердительный ответ отправителю ( OK ). В этом случае он добавляет свое имя в поле <reverse-path> команды MAIL, чтобы включить его в маршрут прохождения сообщения при необходимости уведомить отправителя.
- Хост shardrach не может переслать сообщение и уведомляет об этом отправителя, подтверждая в то же время правильность адреса хоста meshach.smallorg.org. Таким образом, отправитель может попытаться повторно отправить сообщение прямо на meshach.smallorg.org.
- Хост shardrach не может переслать сообщение и посылает уведомление о том, что эту операцию невозможно осуществить с данным сервером. Тогда причины случившегося следует проанализировать системному администратору.
На начальной стадии развития сети Internet практиковалась пересылка сообщений электронной почты вслепую между компьютерами по всему миру, в которых использовался исходный алгоритм передачи почтовых сообщений. К сожалению, такая практика привела к появлению спамеров. Спамерами называют людей, которые посылают огромное количество электронной почты по сети Internet либо с целью наживы (реклама, объявления и т.п.), либо просто для развлечения; при этом их сообщения, как правило, не несут смысловой нагрузки. Довольно часто они используют серверы SMTP, которые вслепую пересылают почтовые сообщения, что помогает скрыть истинного отправителя. Для борьбы со спамерами администраторы почтовых систем либо полностью отключают возможности пересылки почты, либо ограничивают пересылку таким образом, чтобы она осуществлялась только хостам своего домена. Многие Internet-провайдеры разрешают своим клиентам пересылать почту через свои почтовые серверы, но запрещают это делать компьютерам извне.
Если получателей сообщения несколько и некоторые из них не подтвердили получение сообщения, то разрешение этой ситуации зависит от программы-клиента. Некоторые программы-клиенты отвергают все сообщения и возвращают отправителю сообщения код ошибки. Другие программы-клиенты рассылают сообщение известным им пользователям и списком возвращают получателей, которым сообщение не было отправлено, так как они неизвестны или не подтвердили получение.
Команда DATA
Эта команда является основной в протоколе SMTP. После обработки команд MAIL и RCPT команда DATA используется для передачи информационной части сообщения. Формат команды DATA следующий:
DATA
Все, что следует за этой командой, интерпретируется как сообщение для передачи. Сервер SMTP, как правило, дополняет заголовок сообщения меткой времени и информацией об обратном маршруте return-path. Программа-клиент обозначает конец сообщения посредством передачи строки с одной точкой. Формат этой строки следующий:
<CR><LF>.<CR><LF>
Приняв эту последовательность, сервер SMTP "понимает", что передача сообщения закончена и следует вернуть код ответа, который оповестит клиента о том, что его сообщение принято.
При разработке формата реальных сообщений, посылаемых с помощью команды DATA, была проделана огромная работа. Технически теперь просто невозможно отправить сообщение неправильно, так как метод отправки был стандартизирован (см. раздел "Форматы сообщений"). Таким образом, любая комбинация символов кода ASCII будет сразу же передана получателям сообщения. В листинге 5.2 приведен пример сеанса передачи короткого почтового сообщения для локального пользователя сервера SMTP.
1 [rich@shadrach rich]$ telnet localhost 25 2 Trying 127.0.0.1... 3 Connected to localhost. 4 Escape character is '^]'. 5 220 shadrach.smallorg.org ESMTP Sendmail 8.9.3/8.9.3; Wed, 25 Aug 1999 19:34:02 -050 6 HELO localhost 7 250 shadrach.smallorg.org Hello localhost[127.0.0.1], pleased to meet you 8 MAIL FROM:rich@localhost 9 250 <rich@localhost>... Sender ok 10 RCPT TO:rich 11 250 <rich>... Recipient ok 12 DATA 13 354 Enter mail, end with "." on a line by itself 14 This is a short, but sweet, mail message. 15 . 16 250 QAA01619 Message accepted for delivery 17 QUIT 18 221 shadrach.smallorg.org closing connection 19 Connection closed by foreign host. 20 You have mail in /var/spool/mail/rich 21 [rich@shadrach rich]$ mail 22 Mail version 8.1 6/6/93. Type ? for help. 23 "/var/spool/mail/ricn": 1 message 1 new 24 >N 1 rich@shadrach.smallor Wed Aug 25 19:34 11/409 25 &1 26 Message 1: 27 From rich@shadrach.smallorg.org Wed Aug 25 19:34:46 1999 28 Date: Wed, 25 Aug 1999 19:34:24 -0500 29 From; rich@shadrach.smallorg.org 30 31 This is a short, but sweet, mail message. 32 33 &x 34 [rich@shadrach rich]$Листинг 5.2. Пример сеанса SMTP
Итак, в листинге 5.2 представлен типичный обмен сообщениями между двумя хостами по протоколу SMTP. В строке 12 клиент водит команду DATA, а в строке 13 показан ответ, полученный от сервера SMTP. Строки 14 и 15 отображают текстовое сообщение, посланное клиентом. В строке 15 вводится точка, сигнализирующая серверу о конце сообщения. Далее, в строках 20–33 сервер SMTP пересылает сообщение в локальный почтовый ящик пользователя в том же виде в каком он принял его. Заметьте также, что в строках 28 и 29 SMTP-сервер в текст почтового сообщения добавил метку времени и обратный маршрут.
Для стандартизации формата сообщений электронной почты в сети Internet была проделана огромная работа. Ее результатом явилось создание документа RFC 822, который описывает формат электронных текстовых сообщений. Более подробно о форматах сообщений мы поговорим в разделе "Форматы сообщений".
Команда SEND
Команда SEND используется для передачи почтовых сообщений непосредственно на терминал зарегистрированного пользователя системы. Эта команда выполняется только в том случае, когда пользователь находится в системе, и обычно представляет собой всплывающее сообщение, подобно команде write в ОС UNIX. У этой команды имеется серьезный недостаток: с ее помощью внешний пользователь может легко определить, кто в данный момент находится в системе. Эта "возможность" давно и активно эксплуатируется хакерами для получения идентификаторов пользователя в сети Internet у ничего не подозревающих жертв, находящихся в системе. Из-за угрозы безопасности в настоящее время большинство программных пакетов для работы с SMTP уже не содержат эту команду.