3.6.2.  Простой протокол передачи почты (SMTP)

Агент передачи почты — основной компонент системы передачи почты Интернет. Как уже говорилось, МТА как бы представляет данный сетевой компьютер для сетевой системы электронной почты. Пользователи редко имеют дело с МТА, поскольку он не вполне «дружелюбен», однако без него не обходится ни одна почтовая система. После того, как UA пошлет сообщение в выходную очередь, за дело принимается МТА. Он извлекает сообщение и посылает его другому МТА. Этот процесс продолжается до тех пор, пока сообщение не достигнет компьютера-получателя. Для передачи сообщений по TCP-соединению большинство МТА пользуются протоколом SMTP. Сообщения форматированы по правилам виртуального сетевого терминала (NVT), то есть в NVT ASCII. NVT подобен виртуальному сетевому протоколу и нужен затем, чтобы скрыть различия в восприятии разными компьютерами разных символов, например, переводов каретки, переводов строки, маркеров конца строки, очистки экрана и т. д. Символ в NVT состоит из семи битов набора ASCII и является буквой, цифрой или знаком пунктуации. Семибитный набор ASCII часто называется NVT ASCII.

Простой протокол передачи почты обеспечивает двухсторонний обмен сообщениями между локальным клиентом и удаленным сервером МТА. МТА-клиент шлет команды МТА-серверу, а он, в свою очередь, отвечает клиенту. Другими словами, протокол SMTP требует получать ответы от приемника команд SMTP. Обмен командами и ответами на них называется почтовой транзакцией (mail transaction). Данные, как мы уже говорили, передаются в формате NVT ASCII. Кроме того, команды тоже передаются в формате NVT ASCII. Команды передаются в форме ключевых слов, а не специальных символов, и указывают на необходимость совершить ту или иную операцию. В табл. 3.10 приведен список ключевых слов (команд), определенный в спецификации SMTP — RFC 821.

В RFC 821 сказано, что команда VRFY не является обязательной для минимального набора команд SMTP. Однако в RFC 1123 «Требования для сетевых компьютеров Интернет — приложения и обеспечение работы» (Requirements for Internet Hosts — Application and Support, Braden, 1989), команда VRFY фигурирует в списке обязательных для Интернет команд реализации SMTP.

В соответствии со спецификацией команды, помеченные крестиком (X) в табл. 3.10, обязаны присутствовать в любой реализации SMTP. Остальные команды SMTP могут быть реализованы дополнительно. Каждая SMTP-команда должна заканчиваться либо пробелом (если у нее есть аргумент), либо комбинацией CRLF. В описании команд употреблялось слово «данные», а не «сообщение». Этим подчеркивалось, что, кроме текста, SMTP позволяет передавать и двоичную информацию, например, графические или звуковые файлы. Другими словами, SMTP способен передавать данные любого содержания, а не только текстовые сообщения. Это значит, что, рассматривая вопросы, касающиеся SMTP, не забывайте, что термин «сообщение» обозначает не только текстовые данные.

Во многих операционных системах для системного администратора предусмотрена возможность послать сообщение многим пользователям одновременно. Например, перед остановкой системы администратор выполняет команду, которая автоматически рассылает предупреждающее сообщение на каждый подключенный терминал. С другой стороны, пользователь может отключить прием таких сообщений. Тот или иной режим приема сообщений устанавливается при входе пользователя в систему по умолчанию и может измениться позже.

Во многих компьютерах механизм рассылки таких сообщений подобен системе электронной почты. В SMTP существуют команды, позволяющие доставлять сообщения двумя путями — в почтовый ящик или на терминал. В терминах SMTP команда send означает «послать на терминал», а команда mail — «послать в почтовый ящик». Команда SEND является дополнительной, тогда как MAIL — обязательна в любой реализации.

Таблица 3.10

Команды простого протокола передачи почты (SMTP)

Команда

Обязательна

Описание

HELO

X

Идентифицирует модуль-передатчик для модуля-приемника (hello)

MAIL

X

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

RCPT

X

Идентифицирует получателя почтового сообщения (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-приемника