1

我想使用 PHP 中的邮件功能发送电子邮件。标题的“FROM”部分应包含一个带空格的名称

 name with space <mail@server.tld>

不幸的是,一些邮件客户端无法处理这些空间。这就是为什么例如 Thunderbird 在名称中添加引号的原因。

 "name with space" <mail@server.tld>

这很好用,直到您添加 ÄÖÜ 这样的特殊字符,因为它们需要被编码。以下行不通:

 "name with ÄÖÜ and space" <mail@server.tld>

这就是我尝试该功能的原因mb_encode_mimeheader

echo mb_encode_mimeheader("name with"." ÄÖÜ"." and space", "ISO-8859-1", "Q");
# result:
# name with =?ISO-8859-1?Q?=C3=84=C3=96=C3=9C=20and=20space?=

这仍然不起作用,因为在特殊字符第一次出现之前,空格仍然在字符串中。正确的结果应该是:

=?ISO-8859-1?Q?name=20with=20=C3=84=C3=96=C3=9C=20and=20space?=

PHP中是否有可以处理此问题的函数?还是应该混合使用引号和“mb_encode_mimeheader”?还是有不同的方法来处理邮件头中的空格?老实说,我不明白 RFC822 中提到的不同空格的含义。

4

2 回答 2

1

你不需要引号。RFC2047 编码(即mb_encode)也处理空格。

(虽然为了记录,只是普通的空格是完全没有问题的;它们不是一些客户使用引用的原因,无论如何这通常是完全多余的。所以空格的结果实际上一点也不错误。)

于 2012-08-16T05:25:24.987 回答
1

正如IETF 所说,电子邮件的标题中只允许使用 ASCII 字符。因此,我猜您应该对您的电子邮件标头进行 ASCII 编码。

但是,根据我在来自 Internet 工程任务组的新规范中看到的趋势,我们很快就会看到您可能不需要对标头进行编码/解码。

于 2012-08-16T04:15:44.843 回答