Агент передачи почты — основной компонент системы передачи почты Интернет. Как уже говорилось, МТА как бы представляет данный сетевой компьютер для сетевой системы электронной почты. Пользователи редко имеют дело с МТА, поскольку он не вполне «дружелюбен», однако без него не обходится ни одна почтовая система. После того, как 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) |
|
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-приемника |