Что такое специальные символы в заголовках электронной почты и когда использовать кавычки?

Я пытаюсь отправлять и читать электронную почту, используя PHP. До сих пор я узнал, что я должен кодировать специальные символы с помощью функции mb_encode_mimeheader()Но мне не нужно кодировать пробелы.

Я также узнал, что скобки в поле адреса не работают: (http://stackru.com/questions/11989915/is-there-an-error-in-phps-imap-fetch-overview-function-when-reading-заголовки-W). Например, PHP не может работать с заголовком From: Admin [] <user@mail.tld>, но можете прочитать заголовок раздела From: "Admin []" <user@mail.tld>,

Таким образом, очевидно, что квадратные скобки имеют особое значение в заголовке письма (по крайней мере, для PHP). Что за специальные символы в Mailheader, что они означают и где их нужно кодировать / заключать в кавычки?

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

Кажется, что кавычки могут помочь мне с проблемой (http://tools.ietf.org/html/rfc5322#section-3.2.4 - я все еще не уверен на 100%, если это проблема PHP или неправильный заголовок почты). Но как использовать кавычки, и чего избегают кавычки?

В http://tools.ietf.org/html/rfc5322 говорится:

Строки символов, которые включают символы, отличные от разрешенных в атомах, могут быть представлены в формате строки в кавычках, где символы заключены в кавычки (DQUOTE, значение ASCII 34).

Итак, теперь я должен "убежать / процитировать" каждого персонажа по-своему

From: Admin "[""]" <user@mail.tld>

или это нормально все процитировать?

From: "Admin []" <user@mail.tld>

Но что произойдет, если другие кавычки будут заключены в кавычки? Например, у меня есть специальные символы ÄÖÜ в моей строке, которые закодированы в =?UTF-8?B?w4PChMODwpbDg8Kc?=, Итак, будут ли строки в кавычках и в кодировке все еще в соответствии с RFC?

From: "Admin [=?UTF-8?B?w4PChMODwpbDg8Kc?=]" <user@mail.tld>

1 ответ

Если у вас есть RFC2047, вы можете также закодировать весь заголовок как RFC2047 и забыть о цитировании.

По-видимому, вы уже нашли RFC5322, который является авторитетным источником того, что нужно цитировать и почему. По сути, все, что имеет значение в качестве адреса электронной почты, должно быть заключено в кавычки, если оно не является частью адреса электронной почты. Традиционным механизмом цитирования был обратный слеш и / или двойные кавычки, но с MIME вы можете легко прозрачно кодировать все с помощью доступных кодировок MIME.

Ссылка, которую вы дали, объясняет, что символы, которые не допускаются в "атомах", требуют цитирования. Список символов, которые разрешены в атомах, находится в предыдущем разделе.

ALPHA / DIGIT /    ; Printable US-ASCII
                   "!" / "#" /        ;  characters not including
                   "$" / "%" /        ;  specials.  Used for atoms.
                   "&" / "'" /
                   "*" / "+" /
                   "-" / "/" /
                   "=" / "?" /
                   "^" / "_" /
                   "`" / "{" /
                   "|" / "}" /
                   "~"

Если вы перепроверяете таблицу ASCII, вы получите

32   (space)                    not OK
33 !                            OK
34 "                            not OK
35 # through $%& 38             OK
39 ' through () 41              not OK
42 * through + 43               OK
44 ,                            not OK
45 -                            OK
46 .                            not OK
47 / through 0123456789 57      OK
58 : through ;< 60              not OK
61 =                            OK
62 >                            not OK
63 ?                            OK
64 @                            not OK
65 A through BCD...XYZ 90       OK
91 [ through \] 93              not OK
94 ^ through _ 95               OK
96 `                            not OK
97 a through bcd...xyz{|}~ 126  OK
127 DEL                         not OK

В некоторых контекстах набор "точка-атом", который является вышеуказанной плюсовой точкой (точка остановки, точка, ASCII 46), разрешается без кавычек.

Некоторые клиенты явно ошибаются из-за осторожности (некоторые просто помещают все в двойные кавычки, как будто ваше настоящее имя на самом деле не было вашим настоящим именем. Это отстой).

Насколько я понимаю, последовательность RFC2047 разрешена там, где разрешен атом, но это означает, что она не может быть смежной с другим атомом. В любом случае, я бы отказался от этого и рекомендовал бы даже не пытаться смешивать цитирование и перенос RFC2047 в одном заголовке, вместо того, чтобы выяснить, как они взаимодействуют (и, возможно, тогда я обнаружу, что ваша интерпретация не единственная игра в городе, потому что другие ошибка при выяснении этого, или потому что есть много действительных интерпретаций спецификации).

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