MIME

MIME (,  — многоцелевые расширения интернет-почты) — стандарт, описывающий передачу различных типов данных по электронной почте, а также, в общем случае, спецификация для кодирования информации и форматирования сообщений таким образом, чтобы их можно было пересылать по Интернету.

Введение 

MIME определяет механизмы для передачи разного рода информации внутри текстовых данных (в частности, с помощью электронной почты), а именно: текст на языках, для которых используются кодировки, отличные от ASCII, и нетекстовые данные, такие, как картинки, музыка, фильмы и программы. MIME является также фундаментальным компонентом коммуникационных протоколов, таких как HTTP, которым нужно, чтобы данные передавались в контексте сообщений, подобных e-mail, даже если данные реально не являются e-mail.

Основной формат электронных сообщений определен в RFC 5322, который является обновлённой версией RFC 2822 (который, в свою очередь, является обновлённой версией RFC 822). Эти стандарты определяют похожие форматы для текстовых e-mail-заголовков и содержимого и правил, относящихся к общеиспользуемым полям, таким как To:, Subject:, From: и Date:. MIME определяет набор e-mail-заголовков для определения дополнительных атрибутов сообщения, включая тип контента, и определяет множество кодировок, которые могут быть использованы для представления 8-битных бинарных данных с помощью символов из 7-битного ASCII. MIME также определяет правила для кодирования символов из Extended ASCII (с кодами 128—255) в заголовках e-mail-сообщения, таких как Subject:.

MIME расширяем для новых типов — его определение включает метод для регистрации новых типов контента и других атрибутов.

Организация данных 
Формат MIME поддерживает передачу нескольких сущностей в пределах одного сообщения. Причём сущности могут передаваться не только в виде одноуровневой последовательности, но и в виде иерархии с вложением элементов друг в друга. Для обозначения множественного содержимого используются медиа-типы multipart/*. Работа с такими типами осуществляется по общим правилам, описанным в RFC 2046 (если иное не определено конкретным медиа-типом). Если получателю неизвестно как работать с типом, то он обрабатывает его так же, как multipart/mixed.

Для передачи множественного сообщения в заголовок Content-Type добавляется параметр boundary (граница), который обозначает последовательность символов, разделяющих части сообщения. Граница может состоять из цифр, букв и символов '()+_,-./:=?. При использовании специальных символов (не цифр и букв) значение параметра boundary следует заключать в двойные кавычки ". Максимальная длина границы — 70 символов.

Начало каждой части сообщения обозначается строкой --boundary. Конец последнего сообщения обозначается строкой --boundary--. Самые первые символы переноса строки CRLF (коды 13 и 10), которыми начинаются и заканчиваются пограничные строки, не входят в содержимое самой части. Если за ними следуют ещё переносы строк, то они уже принадлежат включаемой части.

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

В самом начале включаемой части располагаются заголовки, описывающие её содержимое (Content-Type, Content-Length и т. п.). Перед непосредственно телом части обязательно должна быть пустая строка, даже если заголовки отсутствуют. Если не определён Content-Type, то он берётся по умолчанию — text/plain.

Тест Марка Криспина 
Марк Криспин (Mark Crispin), автор протокола IMAP, написал тест для проверки корректности обработки MIME.
 Тест представляет собой письмо в формате mbox:

Это сумасшедшее письмо! В нём около 30 вложенных друг в друга частей. Очень хороший тест

Стандарты

См. также 
 Список MIME-типов
 S/MIME
 UUE
 Base64
 Фидонет
 Multipart/form-data

Примечания

Ссылки 
 Почтовый стандарт «MIME» (RFC1521) неполный русский перевод спецификации RFC 1521 «MIME — Multipurpose Internet Mail Extensions. Part one. Mechanismes for Specifying and Describing the Format of Internet Message Bodies», а также конспект некоторых других документов, касающихся применения стандарта MIME
 RFC 1521. MIME — Multipurpose Internet Mail Extensions
 
 Коротко о формате почтового сообщения (из лекций Григория Масича)

Электронная почта
Форматы данных
Протоколы представительского уровня
Протоколы прикладного уровня