我正在尝试使用 PHP 发送和阅读电子邮件。到目前为止,我发现我必须使用该函数对特殊字符进行编码mb_encode_mimeheader()
,但我不必对空格进行编码。
我还发现,地址归档中的括号不起作用:(在读取带括号的标题时,PHP 的 imap_fetch_overview() 函数是否有错误?)。例如 PHP 无法读取 header-section From: Admin [] <user@mail.tld>
,但可以读取 header-section From: "Admin []" <user@mail.tld>
。
因此,显然括号在邮件标头中具有特殊含义(至少对于 PHP)。Mailheader 中有什么特殊字符,它们的含义是什么,它们需要在哪里编码/引用?
例如,PHP 在主题中的括号没有问题,尽管主题也是标题的一部分。
似乎引号可以帮助我解决问题(https://www.rfc-editor.org/rfc/rfc5322#section-3.2.4 - 我仍然不能 100% 确定这是 PHP 的问题还是不正确的邮件头)。但是如何使用引号,以及引号转义了什么?
在https://www.rfc-editor.org/rfc/rfc5322#section-3.2.4它说:
包含原子中允许的字符以外的字符的字符串可以用带引号的字符串格式表示,其中字符被引号(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>