Опубликован: 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.

Valentin Diduk
Valentin Diduk
Украина, одесса, кпи, 2010
Евгений Олабин
Евгений Олабин
Беларусь, Гродно