TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security)
Шрифт:
Когда почта достигает точки назначения, пользовательский агент может самостоятельно добавить строку, указывающую на исходного отправителя.
Приведенный ниже пример поясняет причину добавления таких строк к сообщению. Верхняя строка была вставлена пользовательским агентом получателя. Она содержит сведения об источнике сообщения и о времени его поступления в почтовый ящик.
Идентификатор сообщения (Message-Id) в нижней части примера был добавлен первым почтовым агентом пересылки, который начал обрабатывать это сообщение.
Временные метки нужно анализировать снизу вверх, что позволит понять путь следования сообщения от diall31.mbnet.mb.ca к access.mbnet.mb.ca, далее к bulldog.cs.yale.edu и наконец к pascal.math.yale.edu.
16.8
Иногда бывает невозможно переслать почту в точку назначения. Чаще всего это происходит из-за неправильного ввода идентификатора получателя. Почта, которая не может быть доставлена, отсылается назад отправителю и называется отброшенной (bounced mail).
16.9 Команды SMTP
Сценарий из раздела 16.6.1 содержал наиболее часто используемые команды SMTP. Полный набор команд SMTP представлен в таблице 16.1.
Таблица 16.1 Команды SMTP
Команда | Описание |
---|---|
HELO | Идентифицирует отправителя для получателя. |
MAIL FROM | Начало почтовой транзакции и указание на источник сообщения. |
RCPT ТО | Идентифицирует отдельного получателя. Последовательность таких команд позволяет указать несколько получателей. Получатель по возможности проверяет правильность указанного имени и выводит результат проверки в ответном сообщении. Такая проверка не имеет смысла на промежуточных хостах. Если позже окажется, что некоторый получатель указан некорректно, обратно отправляется краткое сообщение об ошибке. |
DATA | Отправитель готов передать строки текста. Каждая строка завершается <CR> <LF>. Максимальная длина строки, включая <CR><LF>, составляет 1000 символов. Реализации SMTP должны обеспечивать отправку и получение сообщений длиной до 64 К/байт. Желателен максимальный размер, поскольку почта часто используется для копирования файлов. |
RSET | Прерывает текущую почтовую транзакцию, удаляя всю информацию о ней у отправителя и получателя. |
NOOP | Запрашивает у партнера положительный ответ. |
QUIT | Запрашивает у партнера положительный ответ и закрытие соединения. |
VRFY | Запрашивает у партнера подтверждение правильности указанного имени получателя. |
EXPN | Запрашивает у партнера подтверждение соответствия имени получателя списку почтовой рассылки (mailing list). Если указанное имя находится в списке, нужно возвратить сведения о членстве в группе данного почтового списка. |
HELP | Запрашивает у партнера информацию об используемой реализации, например о списке поддерживаемых команд. |
Описанные в стандарте, но редко реализуемые или используемые команды | |
TURN | Запрос смены ролей получателя и отправителя. Партнер может отказаться выполнить эту команду. |
SEND | Если получатель зарегистрирован в системе назначения — направить сообщение прямо на терминал получателя. |
SOML | Send or Mail — послать или отправить. Если получатель зарегистрирован в системе назначения — направить сообщение прямо на терминал получателя, иначе отправить сообщение как почту локальной системы. |
SAML | Send and Mail — послать и отправить. Доставить в почтовый ящик получателя. Если пользователь зарегистрирован, то доставить и на его терминал. |
Команды пересылаются как 4-символьные мнемонические названия. Многие команды сопровождаются параметрами.
Сеанс между партнерами SMTP напоминает соединение telnet в режиме NVT: используются те же самые правила, например пересылаются 7-битные символы ASCII в виде 8-разрядных байтов, а каждая строка оканчивается символами перевода строки и возврата каретки.
16.10 Коды ответов
Коды ответов SMTP имеют структуру, подобную кодам ответов FTP. Код состоит из трех цифр. Первая цифра указывает статус команды:
1yz | Положительный предварительный (Positive Preliminary) ответ (в настоящее время в SMTP не используется) |
2yz | Положительный дополненный (Positive Completion) ответ |
3yz | Положительный промежуточный (Positive Intermediate) ответ |
4yz | Кратковременный отрицательный (Transient Negative) ответ ("повторить попытку") |
5yz | Постоянный отрицательный (Permanent Negative) ответ |
Вторая цифра классифицирует сам ответ:
x0z | В ответ на возникновение проблемы указывает на синтаксическую ошибку или неизвестную команду |
x1z | Ответ на информационный запрос (например, help) |
x2z | Ответ с информацией о соединении |
x3z | В настоящее время не определен |
x4z | В настоящее время не определен |
x5z | В ответе указываются сведения о почтовой системе получателя |
Значение третьей цифры меняется в зависимости от команды и первых двух цифр кода.
16.11 Формат сообщений Интернета
Стандарт для формата сообщений Интернета определен в RFC 822. Сообщение состоит из (в порядке списка):
■ Набора полей заголовка (многие из них необязательны)
■ Пустой строки
■ Текста, или тела (body), сообщения
Поле заголовка имеет вид:
Имя_поля: Содержимое_поля
Имена полей и их содержимое записываются символами ASCII. Существуют разнообразные поля заголовка. К наиболее распространенным можно отнести:
Можно ожидать, что каждый заголовок сообщения содержит поля Date, From и To. Добавленные поля (received field) формируются на основе временных меток, собираемых при переходе через промежуточные почтовые агенты пересылки. По большей части почтовое программное обеспечение может создавать идентификатор, который вставляется в сообщение. Например: