В процессе устранения проблемы с отображением сообщения электронной почты я заметил, что заголовок электронной почты содержит 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>
в котором в приведенном вами примере имя указано как пустое, а за ним следует адрес электронной почты.