Шрифт:
Команды пересылаются как 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) формируются на основе временных меток, собираемых при переходе через промежуточные почтовые агенты пересылки. По большей части почтовое программное обеспечение может создавать идентификатор, который вставляется в сообщение. Например:
Поле Message-Id должно быть уникально для сети. Для этого в поле наряду с уникальным буквенно-цифровым идентификатором обычно включается имя хоста отправителя. Отметим, что показанный выше идентификатор содержит дату (1995 08 27), универсальное время (12 01) и дополнительную строку, обеспечивающую уникальность идентификатора для данного хоста и времени отправки.
Поля Resent (пересылка) добавляются на промежуточных системах. Например: Resent-To (куда переслать), Resent-From (откуда переслать), Resent-cc (переслать в систему cc-Mail), Resent-bcc (переслать в blind cc-Mail), Resent-Date (когда переслать), Resent-Sender (от кого переслать), Resent-Message-Id (с каким идентификатором переслать) и Resent-Reply-To (переслать в ответ на что).
Очень важна пустая строка за заголовком сообщения. По ней пользовательский агент определяет, что заголовок завершился и начинается тело сообщения.
16.12 Почтовые расширения файлов и MIME
Простота SMTP и формата почты облегчает реализацию почтовых систем Интернета и приводит к широкому распространению этих средств. Однако пользователям неудобно работать с простыми и ограниченными по своим возможностям текстовыми сообщениями. Ясно, что SMTP нуждался в переработке. Но как это можно было сделать без изменения уже установленных базовых почтовых приложений?