Требуется ли Content-Transfer-Encoding для multipart/alternative Content-Type?

У меня есть приложение, которое отправляет электронные письма, и в течение многих месяцев оно работало нормально. Недавно у меня были проблемы с utf-8 закодированными электронными письмами, отправленными на iPhone Exchange account (то есть не IMAP).
Все, что получатель должен был видеть, — это большой набор бессмысленных символов, таких как LS0tLS0tPV9QYXJ0XzE0N18[....].

Сравнивая заголовки своих электронных писем с Gmail, я заметил, что у меня есть дополнительные Content-Transfer-Encoding, связанные с Content-Type: multipart/alternative;.
Мое электронное письмо будет выглядеть так:

Delivered-To: ...
Received: ...
...
MIME-Version: ...
Content-Type: multipart/alternative; 
    boundary="----=_boundary" 
Content-Transfer-Encoding: Base64  # <= the extra setting

----=_boundary
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: Base64

YmVu0Cg==

----=_boundary
Content-type: text/html; charset=utf-8
Content-Transfer-Encoding: Base64

PGh0bWwgeG1sbnM6bz0iIj48aGVhZD48dGl0bGU+PC90aXRsZT48L2hlYWQ+PGJvZHk+YmVub2l0
PC9ib2R5PjwvaHRtbD4NCjx9IjAiIC8+Cg==

----=_boundary

Если я удалю дополнительную настройку, моя электронная почта будет получена и будет отображаться правильно.

Мои вопросы:

  1. Нужна ли настройка Encoding с Content-Type: multipart/alternative; даже в особых случаях?
  2. Безопасно ли удалить его и просто продолжать использовать мое приложение, как раньше?

Изменить Я нашел на IETF:

Соображения по кодированию. Многокомпонентные типы контента не могут иметь кодировку.

Но я также нашел на Wikipedia:

Кодирование передачи содержимого составного типа всегда должно быть «7-битным», «8-битным» или «бинарным», чтобы избежать осложнений, которые могут возникнуть при многоуровневом декодировании.

Разве это не противоречиво?


person oldergod    schedule 28.11.2012    source источник


Ответы (2)


Заявления IETF и Википедии на самом деле не противоречат друг другу. 7bit, 8bit или binary на самом деле не являются кодировками контента, поскольку они не определяют никакого преобразования контента. Они просто заявляют, что контент не был закодирован. В случае 7bit это также указывает, что содержимое не нужно кодировать, даже если сообщение необходимо отправить по транспорту, который не является 8-битным.

Только самые нижние слои сообщений должны иметь фактический Content-Transfer-Encoding, например base64 или quoted-printable. В сообщении, которое вы цитируете из внешней части, определенно не используется кодировка base64, поэтому заявление о том, что оно не только нарушает стандарт, но и неверно. Это, безусловно, может вызвать проблемы с отображением этого сообщения.

person qqx    schedule 28.11.2012

На практике каждая часть составного контейнера имеет свою собственную кодировку, и нет смысла объявлять ее для составного контейнера. Я все равно не могу понять цитату из Википедии; в любом случае, это вряд ли авторитетно.

person tripleee    schedule 28.11.2012