Опубликован: 21.11.2006 | Уровень: специалист | Доступ: платный
Лекция 5:

Протокол SMTP

Двоичные данные и MIME

Возможно, вы уже заметили, что использование команды DATA является практически единственным механизмом для передачи сообщений на SMTP-сервер. Наверное, вы также обратили внимание, что команда DATA разрешает ввод только текстовых данных в формате ASCII. Вы уже наверняка задумывались, каким образом все эти роскошные фотографии, посылаемые в цифровом виде по электронной почте, если SMTP поддерживает пересылку только текстовых сообщений. Ответ довольно прост: программа-клиент электронной почты до передачи сообщения программе SMTP конвертирует двоичные данные сообщения в текстовый формат ASCII. Почтовая программа у получателя делает обратное преобразование текста в формате ASCII в двоичные данные, которые, собственно, и посылались изначально. Все это довольно легко описать, а вот сделать...

За несколько лет до изобретения протокола SMTP системные администраторы UNIX уже пересылали двоичные данные с помощью почтовых программ, которые "понимали" только текст в формате ASCII. Метод, который они использовали для преобразования двоичных данных в ASCII-код, назывался uuencode и uudecode. Первые буквы uu обозначали UNIX-to-UNIX. Был также разработан протокол для передачи данных между UNIX-компьютерами посредством модемов (об этом подробнее вы прочтете в "Протокол UUCP" , ). После того как протокол SMTP приобрел популярность, системные администраторы UNIX стали использовать эти утилиты для передачи двоичных данных с его помощью через Internet. К сожалению, многие современные пакеты для работы с электронной почтой уже не включают такую возможность.

Сообщения, закодированные с помощью uuencode

Если принят двоичный файл, закодированный с помощью uuencode, и ваша программа для работы с электронной почтой не может раскодировать его, не отчаивайтесь. Вам нужно лишь сохранить все сообщение полностью в текстовый файл и затем с помощью программы uudecode преобразовать его в двоичный. Абсолютно все версии ОС Linux имеют в комплекте поставки утилиту uudecode. Многие версии DOS и Windows также содержат эту программу.

Многие современные пакеты для работы с почтой не содержат утилиту uuencode по той причине, что теперь уже официально существует стандарт для кодирования двоичных файлов в сети Internet. В документах RFC 2045 и 2046 описывается формат многоцелевых расширений для электронной почты в Internet (Multipurpose Internet Mail Extensions — MIME). Алгоритм кодирования MIME намного надежней uuencode. В нем учитывается тип двоичного файла, подвергающегося преобразованию, а также передается дополнительная информация о файле для декодера. Алгоритм MIME позволяет помещать двоичные данные напрямую в стандартное почтовое сообщение, согласно RFC 822. Для описания двоичных данных, вкладываемых в сообщение формата RFC 822, были созданы пять новых полей заголовка. Программы для работы с почтой, которые поддерживают стандарт MIME, должны правильно обрабатывать все эти новые типы заголовков. На рис. 5.2 показано, каким образом все это помещается в стандартное почтовое сообщение.

Поля заголовка в сообщении для MIME

Рис. 5.2. Поля заголовка в сообщении для MIME

Поле заголовка MIME-Version

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

Поле Content-Transfer-Encoding

В поле заголовка Content-Transfer-Encoding указывается способ помещения двоичных данных в сообщение текстового формата ASCII. На сегодняшний день существует семь различных способов кодирования двоичных данных, однако наиболее часто встречается кодирование base64. При применении этого метода кодирования 6-битовые блоки двоичных данных преобразуются в 8-битовые блоки, воспринимаемые как текст ASCII.

Поле Content-ID

Это поле заголовка используется для идентификации сеансов MIME по определенному идентификационному коду, когда содержимое имеет сложную структуру.

Поле Content-Description

Поле заголовка Content-Description используется для текстового описания в формате ASCII данных, помещенных в почтовое сообщение. Это удобно при пересылке документов, созданных при помощи текстового процессора или графики, которые ничем не отличаются, будучи закодированными base64.

Иван Панченко
Иван Панченко
Казахстан, Астана, сш.№16, 2009