Опубликован: 21.11.2006 | Доступ: свободный | Студентов: 1812 / 140 | Оценка: 4.09 / 4.00 | Длительность: 38:34:00
Лекция 5:

Протокол 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 уже не содержат эту команду.