Читаем TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) полностью

■ Менее эффективно — через старый стандарт SMTP. Перед пересылкой нетекстовой части сообщения старому агенту SMTP эта часть должна быть преобразована так, чтобы она выглядела как обычный текст NVT.

На рис. 16.7 показана работа такой архитектуры.

Рис. 16.7. Доставка сообщения MIME

<p>16.12.1 Улучшенный агент пересылки почты</p>

Улучшенный агент пересылки почты (Extended Message Transfer Agent) должен поддержать одну дополнительную команду. Вместо HELO он посылает сообщение-приветствие EHLO. Если ответ положителен, партнер также является улучшенным агентом пересылки почты (Extended MTA). Но если ответом будет сообщение об ошибке, значит MTA должен вернуться к протоколу SMTP и послать команду HELO.

Потребность поддержки MIME была основным поводом для улучшения агентов пересылки почты MTA. Кроме этого, можно добавить поддержку дополнительных служб посредством введения новых ключевых слов для EHLO. Для пересылки сообщения увеличенного размера имеется новая служба, позволяющая отправителю декларировать размер сообщения перед его отправкой. Приемник может указать, готов ли он принять сообщение такого размера. Он также может указать наибольший доступный для него размер.

Официальные расширения регистрируются в Internet Assigned Numbers Authority (IANА). Отдельные программы включают новые экспериментальные расширения, для которых используются временные названия, начинающиеся с X.

<p>16.12.2 Диалог в улучшенной версии SMTP</p>

Показанный ниже пример демонстрирует, как улучшенный агент пересылки почты формирует транзакцию для отправки сообщения MIME в 8-битном формате:

■ Получатель объявляет о своих улучшенных возможностях, включая 8BITMIME.

■ Команда MAIL FROM имеет параметр BODY = 8BITMIME.

EHLO MATH-GW.CS.YALE.EDU

250-Hello MATH-GW.CS.YALE.EDU, pleased to meet you

250-8BITMIME

250-HELP

250-SIZE

250-XONE

250-XVRB

250-XQUE

MAIL FROM: BODY = 8BITMIME

250 ... Sender ok

RCPT TO:

250 ... Recipient ok

DATA

354 Send 8BITMIME message, ending in CRLF.CRLF.

...

.

250 OK QUIT

250 Goodbye

<p>16.13 Формат сообщений MIME</p>

Сообщение MIME содержит набор заголовков и одну или несколько частей тела сообщения (body part). Обычное сообщение почты Интернета начинается заголовками, подобными From:, To: и Date:. Сообщение MIME содержит дополнительные вводные заголовки, описывающие структуру и содержание сообщения.

Если сообщение состоит из нескольких частей, один из вводных заголовков определяет строку, используемую как разделитель. После такого разделителя будут стоять дополнительные заголовки, которые описывают следующую далее часть сообщения.

<p>16.13.1 Заголовки описания типа содержания в MIME</p>

Существует множество различных типов информации, которую можно разместить в сообщении. Общая структура сообщения и типы информации в каждой его части объявляются в заголовке Content-Type (тип содержания). Пример такого заголовка:

Content-Type: MULTIPART/MIXED; BOUNDARY ="ххххххххх"

Content-Type: TEXT/PLAIN; charset=US-ASCII

Content-Type: image/gif

Content-Type: audio/basic

В основном заголовок Content-Type имеет форму:

Content-Type: тип/подтип; param — значение; param = значение; ...

Типы, подтипы и имена параметров нечувствительны к регистру символов. Они могут быть записаны в верхнем или нижнем регистре, равно как и в смешанном формате. Однако некоторые значения параметров зависят от регистра символов.

Хотя заголовки MIME записываются английскими фразами, параметр charset может объявить, что часть представлена в кодировке ISO-8859-1 или символами японского, еврейского, арабского языков или кириллицы.

<p>16.13.2 Пример сообщения MIME</p>

Показанное ниже сообщение MIME имеет несколько частей: одну текстовую часть и два подключенных текстовых файла. Первый заголовок Content-Type

Content-Type: MULTIPART/MIXED;

BOUNDARY = "plum.yale.edu:814898609:772210698:709846916:1916796928"

указывает, что сообщение состоит из нескольких частей. Параметр BOUNDARY (разделитель) маркирует начало и конец каждой части. Разделитель выбирается пользовательским агентом. В данном случае разделитель состоит из имени хоста и строки цифр, сгенерированных пользовательским агентом. Фактическая граница будет состоять из двух символов дефиса (--) и следующей далее строки-разделителя.

Перейти на страницу:

Похожие книги