Indy10 - закодированные слова в адресе электронной почты

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

abc <abc@example.com>

это содержит:

abc <=?ISO8859-1?B?YWJjQGV4YW1wbGUuY29t=?=>

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

Кроме того, если адрес электронной почты заголовок находится в форме:

From: =?ISO8859-1?B?YWJjQGV4YW1wbGUuY29t=?=

Он будет декодирован многими программами, но не Indy. В большинстве программ происходит то, что они считают эту часть частью "От имени" и декодируют ее как таковую, но оставляют адрес электронной почты в кодировке, что приводит к:

Name = abc@example.comEmail = =?ISO8859-1?B?YWJjQGV4YW1wbGUuY29t=?=

Что делает его хотя бы частично хорошо декодированным.

Однако в Indy это приводит к:

Name = **blank**Email = =?ISO8859-1?B?YWJjQGV4YW1wbGUuY29t=?=

Должно ли это поддерживаться в Indy (или в обратном порядке, так что он рассматривает часть base64 как часть "name", а не как часть "email"), или это неправильно отформатированный адрес электронной почты? Или это вопрос интерпретации, который следует интерпретировать как первую часть, так как электронная почта действительно может выглядеть From: abc@example.com без <> персонажи.

1 ответ

Решение

abc <=? ISO8859-1? B? YWJjQGV4YW1wbGUuY29t =? =>

Indy не поддерживает такие закодированные адреса согласно разделу 5 RFC 2047 "Использование закодированных слов в заголовках сообщений":

"Кодированное слово" может появляться в заголовке сообщения или заголовке части тела в соответствии со следующими правилами:

(1) "кодированное слово" может заменить токен "текст" (как определено в RFC 822) в любом поле заголовка "Тема" или "Комментарии", любом поле заголовка сообщения расширения или любом поле части тела MIME, для которого определено тело поля как "* текст". "Кодированное слово" может также появляться в любом определяемом пользователем ("X-") поле сообщения или заголовке части тела.

Обычный текст ASCII и 'кодированное слово' могут появляться вместе в одном поле заголовка. Однако "кодированное слово", которое появляется в поле заголовка, определенном как "* текст", ДОЛЖНО быть отделено от любого смежного "кодированного слова" или "текста" с помощью "линейного пробела".

(2) "Кодированное слово" может появляться в "комментарии", ограниченном "(" и ")", т. Е. Везде, где допускается "ctext". Точнее, определение RFC 822 ABNF для "комментария" изменяется следующим образом:

comment = "(" * (ctext / quoted-pair / comment / encoded-word) ")"

Закодированное "Q" кодированное слово, которое появляется в "комментарии", НЕ ДОЛЖНО содержать символы "(", ")" или "кодированное слово", которое появляется в "комментарии", ДОЛЖНО быть отделено от любого соседнего 'encoded-word' или 'ctext' на 'linear-white-space'.

Важно отметить, что "комментарии распознаются только внутри" структурированных "полевых органов. В полях, тела которых определены как '* text', "(" и ")" рассматриваются как обычные символы, а не как разделители комментариев, и применяется правило (1) этого раздела. (См. RFC 822, разделы 3.1.2 и 3.1.3)

(3) В качестве замены сущности "слово" внутри "фразы", ​​например, той, которая предшествует адресу в заголовке "От", "Кому" или "Копия". Определение ABNF для "фразы" из RFC 822, таким образом, становится:

фраза = 1*(закодированное слово / слово)

В этом случае набор символов, которые могут быть использованы в кодированном слове "Q", ограничен: . "Кодированное слово", которое появляется в "фразе", ДОЛЖНО быть отделено от любого смежного "слова", "текста" или "специального" словом "линейно-пробел".

Это ЕДИНСТВЕННЫЕ места, где может появиться "закодированное слово". Особенно:

  • "Закодированное слово" НЕ ДОЛЖНО появляться в какой-либо части "addr-spec".

  • "Кодированное слово" НЕ ДОЛЖНО появляться в "строке в кавычках".

  • "Кодированное слово" НЕ ДОЛЖНО использоваться в поле заголовка "Получено".

  • "Кодированное слово" НЕ ДОЛЖНО использоваться в параметре поля MIME Content-Type или Content-Disposition или в любом структурированном теле поля, кроме как в "comment" или "фразу".

Indy (и RFC 2047) поддерживает закодированные имена, хотя:

From: =?ISO8859-1?B?YWJj?= <abc@example.com>

От: =?ISO8859-1?B?YWJjQGV4YW1wbGUuY29t=?=

В этом случае Indy интерпретирует это как адрес электронной почты без имени. И, как указано выше, закодированные адреса не допускаются.

Другие вопросы по тегам