我试图发送和使用PHP读取电子邮件。 到目前为止,我发现,我有编码使用功能的特殊字符mb_encode_mimeheader()
但我没有编码的空间。
我还发现,在ADRESS提交的不工作括号:(http://stackoverflow.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的问题或不正确的mailheader )。 但如何使用引号,什么是报价逃脱?
在http://tools.ietf.org/html/rfc5322#section-3.2.4它说:
包括比那些允许的原子以外的字符的字符串可以在引用字符串格式,其中,所述字符是由引号(DQUOTE,ASCII值34)字符包围来表示。
所以,我现在该“逃/引用”每个角色对自己的
From: Admin "[""]" <user@mail.tld>
或者是细到引用都在一起?
From: "Admin []" <user@mail.tld>
但是会发生什么,如果其他控制序列封闭withing引号? 例如,我有特殊字符ÄÖÜ
我的字符串内,其被编码为=?UTF-8?B?w4PChMODwpbDg8Kc?=
。 因此,将“报价,编码”字符串根据RFC还是罚款?
From: "Admin [=?UTF-8?B?w4PChMODwpbDg8Kc?=]" <user@mail.tld>
如果你有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包装,而不是可能搞清楚它们之间如何相互作用(也许然后发现你的解释是不是在镇上唯一的游戏,或者是因为别人做一个错误的时候盘算出来,或因为有规范的多个有效的解释)。