【发布时间】:2012-08-14 01:48:00
【问题描述】:
我正在尝试使用 PHP 发送和阅读电子邮件。到目前为止我发现,我必须使用函数mb_encode_mimeheader()对特殊字符进行编码,但我不必对空格进行编码。
我还发现,地址归档中的括号不起作用:(Is there an error in PHP's imap_fetch_overview()-function when reading headers with brackets?)。例如 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>
【问题讨论】:
标签: php email character-encoding rfc822 rfc2822