Протокол MIME
Multipurpose Internet Mail Extensions (MIME) — это интернет‑стандарт, расширяющий формат электронной почты для поддержки:
- текст в наборах символов, отличных от US-ASCII;
- нелетекстовые вложения;
- многокомпонентные тела сообщений; и
- информацию заголовков в не‑ASCII наборах символов.
SMTP поддерживает только 7‑битные ASCII‑символы, что фактически означает, что он поддерживает лишь небольшое количество языков. Языки, основанные на латинском алфавите, работают в SMTP; другие языки отображаются некорректно при доставке письма. Однако MIME расширяет поддержку ASCII‑символов в SMTP, позволяя отправлять и отображать сообщения, использующие другие наборы символов, изображения и звуки. Как правило, все почтовые клиенты и SMTP‑серверы правильно обрабатывают сообщения в формате MIME.
Понимание заголовков MIME
Заголовки MIME содержат информацию о протоколе.
MIME-Version
Это указывает, что сообщение имеет формат MIME. Выглядит так:
MIME-Version: 1.0
Content-Type
Это указывает тип содержимого сообщения, задаётся парой тип/подтип: text/plain, text/html и т.д. Тип multipart может содержать текст, HTML, вложения, изображения, аудио, видео и т.п.
Content-Type: multipart
Content-Transfer-Encoding
Указывает, используется ли схема кодирования из двоичного в текст поверх той, что указана в content-type. Если используется, указывает какую. Здесь можно задать тип кодирования 7‑bit, 8‑bit или binary.
Encoded-Word
Заголовки сообщений SMTP обычно используют ASCII‑символы. Не‑ASCII символы должны использовать синтаксис MIME‑encoded word вместо буквального текста. Формат:
"=? charset ? encoding ? encoded text ?=".
Multipart‑сообщения
MIME‑multipart сообщение содержит границу в заголовке content-type. Эта граница, которой не должно быть в любой части, помещается между частями и в начале и в конце тела сообщения, как показано ниже:
MIME-version: 1.0
Content-type: multipart/mixed; boundary="frontier"
This is a multi-part message in MIME format.
--frontier
Content-type: text/plain
This is the body of the message.
--frontier
Content-type: application/octet-stream
Content-transfer-encoding: base64
PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+VGhpcyBpcyB0aGUg
Ym9keSBvZiB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==
--frontier--
Каждая часть состоит из собственного заголовка содержимого и тела.
Подтипы Multipart
Стандарт MIME определяет различные подтипы multipart‑сообщений. Подтип указывается в заголовке "Content-Type" общего сообщения.
Ниже представлен список наиболее часто используемых подтипов.
- Mixed: multipart/mixed используется для отправки файлов с различными заголовками "Content-Type" встроенно. При отправке изображений или других легко читаемых файлов большинство почтовых клиентов отображают их встроенно.
- Message: часть Message содержит электронное письмо.
- Digest: digest — простой способ отправки нескольких текстовых сообщений. Тип содержимого по умолчанию для каждой части — "message/rfc822".
- Alternative: Подтип alternative указывает, что каждая часть является "альтернативной" версией одного и того же (или схожего) содержимого, каждая в другом формате, указанном в заголовке "Content-Type".
Наиболее распространённый multipart/alternative используется для писем с двумя частями: простой текст (text/plain) и HTML (text/html). Текстовая часть обеспечивает совместимость со старыми клиентами, а HTML‑часть позволяет использовать форматирование и гиперссылки. Большинство почтовых клиентов предлагают пользователю опцию предпочитать простой текст перед HTML; это пример того, как локальные факторы могут влиять на выбор приложением «лучшей» части сообщения для отображения.