【问题标题】:How to encode spaces in E-Mail headers?如何编码电子邮件标题中的空格?
【发布时间】:2012-08-11 23:35:21
【问题描述】:

我想使用 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 中提到的不同空格的含义。

【问题讨论】:

  • 这可能属于stackoverflow。
  • Sven - 如果您同意将其移至 SO,您可以标记您的问题并请求迁移。目前,2 个接近投票是迁移到 SO。
  • 其实RFC2047对quoted-printable中的空格有特殊规定;它们可以用下划线表示。但正如我在回复中指出的那样,您实际上不需要对它们进行编码;代码给你的结果很好。
  • 我刚刚意识到,空格不是问题,而是我使用的括号。见stackoverflow.com/questions/11989915/…

标签: php email character-encoding


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    作为IETF says,电子邮件只允许在其标题中使用 ASCII 字符。因此,我猜您应该对您的电子邮件标头进行 ASCII 编码。

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

    【讨论】:

      猜你喜欢
      • 2010-12-19
      • 1970-01-01
      • 2010-12-13
      • 2012-10-18
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      相关资源
      最近更新 更多