Что такое специальные символы в заголовках электронной почты и когда использовать кавычки?
Я пытаюсь отправлять и читать электронную почту, используя 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 в одном заголовке, вместо того, чтобы выяснить, как они взаимодействуют (и, возможно, тогда я обнаружу, что ваша интерпретация не единственная игра в городе, потому что другие ошибка при выяснении этого, или потому что есть много действительных интерпретаций спецификации).