2016-09-19 8 views
0

Я действительно смущен, когда дело доходит до формата заголовков Content-Id в сообщениях.Точный формат заголовка Content-Id

Мне кажется, что только RFC 2045 охватывает формат заголовка, однако кратко:

При построении пользовательского агента высокого уровня, может быть желательно, чтобы одно тело, чтобы сделать ссылку на другой , Соответственно, органы могут быть
помечены с помощью "Content-ID" поле заголовка, который синтаксически
идентичен "Message-ID" поле заголовка:

id := "Content-ID" ":" msg-id 

Как значения Message-ID, Контент- Идентификационные значения должны быть сгенерированы в всемирно уникальными.

RFC 2822 объясняет формат msg-id маркеров следующим образом:

Идентификатора сообщения (MSG-ID) подобен по синтаксису к угловому ADDR конструкции без внутреннего CFWS.

сообщение Идентификатор = "Message-ID:" сообщ-идентификатор CRLF

в-ответ-на = "In-Reply-To:" 1 * MSG-ID CRLF

ссылки = «Ссылки :»1 * MSG-ID CRLF

MSG-ID = [CFWS] "<" ID-влево "@" Ид-право ">"[CFWS]

Ид слева = дот-атом-текст/no-fold-quote/obs-id-left

i д-вправо = точка-атом-текст/нет согнутой буквальным/набл-ID-правый

не раз кавычка = DQUOTE * (QText/кавычко пар) DQUOTE

не согнутая буквальным = "[" * (DTEXT/кавычко пара) "]"

Длинная короткая история: она включает в ('@') символ, так же, как Message-Id заголовок сообщения. Тем не менее, почти все читательские статьи в формате MIME приводят примеры Content-Idбез символа at (включая не-действительно глобальные идентификаторы, такие как myimagecid или inlineimage001, а также случайно сгенерированные UUIDS без символа at). Они, несомненно, подчеркнули бы важность символа «@», если это было необходимо, как и в случае с заголовком Message-Id, верно? Правильно?

Я несколько тестов на реальных почтовых клиентах и ​​посмотреть, как они составляют письма с вложенными встроенными изображениями:

  • Thunderbird генерирует идентификаторы с символом. Пример: [email protected]
  • Gmail генерирует идентификаторы без такой символ и без домена.Пример: ii_abc1234x0_12345ab12abcdefa

я не испытывал какие-либо больше клиентов электронной почты (если кто-то сделали, было бы здорово, чтобы завершить список выше), но эти два уже показывают поразительную разницу. Google не подчиняется стандартам RFC? Это наверняка выглядит вонючим, и я хочу знать, так ли это потому, что я что-то пропустил, или потому, что формат в действительности не так важен (что в долгосрочной перспективе кажется довольно тревожным). Я также заинтересован в проверке того, как многие популярные почтовые клиенты фактически отбрасывают символ «at».

ответ

1

Идите по тому, что говорит spec, а не тем, что делают некоторые почтовые клиенты.

Так что да, заголовок Content-Id должен иметь значение, соответствующее тому, как указано в спецификации, и поэтому должен иметь символ «@».

Мир электронной почты - это сломанная адская дыра многих почтовых клиентов и серверов, которые делают свое дело и не соблюдают стандарты.

Будучи тем, кто написал почтовое программное обеспечение в течение последних 17 лет, я могу заверить вас, что это не единственное место, от которого Google отклоняется от спецификаций.

+0

Характеристики обязательно пригодится при составлении писем. Однако, когда я разбираю входящую почту, я должен быть полностью осведомлен о том, какие нарушения стандарта разрабатываются (Gmail) или предназначены для злонамеренного (спама) и действуют соответственно. Я не могу просто отклонить каждое письмо, не соответствующее спецификациям. Теперь, воспользовавшись вашим 17-летним опытом управления этим сумасшедшим домом, не могли бы вы расширить свой ответ и рассказать мне, какие другие части спецификаций могут быть нарушены почтовыми клиентами/серверами? Мне также очень любопытно, что другие спецификации Google нарушают (это не должно быть связано с почтой). – Tomalla

+1

Я немного расспрашивал о разборе заголовков адресов в 2013 году http://jeffreystedfast.blogspot.com/2013/08/why-decoding-rfc2047-encoded-headers-is.html, а затем обнаружил разработчика Thunderbird, который разглагольствовал (много более красноречиво, чем я) о похожих проблемах с электронной почтой, которую вы можете найти на http://quetzalcoatal.blogspot.com/ - у него есть целая серия сообщений в блогах, которые я бы настоятельно рекомендовал прочитать, если вы заинтересованы в реализации анализатора MIME или даже просто парсеров адресов электронной почты. – jstedfast

+1

Другие отклонения GMail от спецификаций почты, которые я обнаружил, были связаны с их реализацией IMAP. Например, они не обрабатывали псевдонимы 'ALL',' FAST' или 'FULL', определенные для использования с командой FETCH несколько лет назад (возможно, это исправлено сейчас, я не уверен). Реализация сервера IMAP сервера GMail прерывается, когда он встречает вложенные мультипакеты с той же границей и возвращает 'BODYSTRUCTURE', как пример в https://github.com/jstedfast/MailKit/issues/205, - в то время как раздражает с точки зрения клиента IMAP, я на самом деле понять и сочувствовать Google по этой проблеме. – jstedfast