Назад | Перейти на главную страницу

Разрешено ли содержимое HTML в значениях заголовков электронной почты?

В процессе устранения проблемы с отображением сообщения электронной почты я заметил, что заголовок электронной почты содержит HTML.

Пример:

From: <bob@foo.com>
To: <john@foo2.com>
Date: 11 Feb 13 12:00:23
Subject: Foo Test
Message: <html><head><meta http-equiv="Content-Language" content="en-us"
         <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
         <title>Foo Test 123</title><body>Hi
Message-ID: <slkdsjflksdjflkslsjldkfjlsd-sldkfjslkdjfl@foo.com>

Заголовок сообщения добавляется вышестоящим сервером, которым я не управляю. Первоначальная проблема, которую я наблюдал, заключалась в том, что в тексте HTML в заголовке отсутствовал тег, поэтому читатель электронной почты подумал, что остальная часть сообщения (включая другие заголовки) была частью тела сообщения (что привело к тому, что источник mime отображался в тело вместо визуализированного HTML.

Мне это определенно кажется неправильным - я не могу представить себе сценарий, в котором было бы полезно иметь HTML в самих заголовках. Тем не менее, я не могу найти раздел в RFC, который явно определяет, что может (или не может) быть в заголовках. Может ли кто-нибудь указать мне правильное направление?

В частности, я хочу знать: существуют ли какие-либо ограничения на то, какой тип контента может быть помещен в заголовки электронной почты и какие символы могут быть указаны в именах / значениях заголовков?

Откуда заголовок "Сообщение"? Содержит ли сообщение текст или оно каким-то образом попало в заголовок «Сообщение»? "Сообщение" не является стандартным заголовком IMF, определенным в RFC 5322 и это не в IANA постоянный или предварительный списки. Где-то может быть почтовый ридер, который его интерпретирует, но по большей части «Сообщение:» может с таким же успехом читаться «X-это-будет-вероятно-проигнорировано:»

Ограничений на то, что можно разместить в заголовке, очень мало. rfc5322 раздел-2.2 только говорит, что имя поля заголовка должно быть печатными символами. Пока это правда и содержание "сложенный" правильно, вы МОЖЕТЕ помещать в заголовки почти все.

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

Я думаю, что Джеральд прав в том, что вы можете меньше спрашивать о том, является ли формат сообщения законным, и больше о том, кто и почему кто-то добавляет это в заголовок.

Это не HTML, а метод, описанный RFC 822 (раздел 3.4.6) для разграничения почтовых ящиков. Соответствующий раздел гласит:

There are three types of brackets which must occur in matched
pairs, and which may NOT be nested:
o Colon/semi-colon (":" and ";") are   used  in  address
  specifications  to  indicate that the included list of
  addresses are to be treated as a group.
o Angle brackets ("<" and ">")  are  generally  used  to
  indicate  the  presence of a one machine-usable refer-
  ence (e.g., delimiting mailboxes), possibly  including
  source-routing to the machine.

Это также объясняется в раздел 6.1 (Синтаксис) следующим образом:

mailbox     =  addr-spec                    ; simple address
            /  phrase route-addr            ; name & addr-spec
route-addr  =  "<" [route] addr-spec ">"

В основном это используется для отображения в открытом виде имени человека, а также его адреса электронной почты, например

John Doe <jdoe@somewhere.com>

в котором в приведенном вами примере имя указано как пустое, а за ним следует адрес электронной почты.