2

当我使用 PHP 邮件发送包含 £ 的电子邮件时,它在 Outlook/hotmail 中显示为 £。在 Gmail/thunderbird 中很好。

知道如何解决这个问题吗?

4

5 回答 5

3

问题是,客户端不知道使用什么编码来编码主题。无论您的应用程序在Content-Type标头中设置什么,都仅适用于电子邮件正文,而不适用于标头。

通常这会影响以下标题:

  • 学科

为了使用不同的编码,您的国际化标题行应使用以下两种方法之一进行 MIME 编码(从 RFC 2047 开始):base64 (B) 或修改后的引用打印 (Q)。编码的主题通常如下所示:

Subject: =?ISO-8859-1?Q?Pr=FCfung_f=FCr?= Entwerfen von einer MIME kopfzeile

这可能看起来很困难,但是 PHP 中有一个非常方便的辅助函数可以完成所有的魔法:

或者,您可以查看以下讨论:

直接使用前quoted_printable_encode()需要考虑到长行需要按一定长度分割,空格需要用下划线“_”代替。

于 2012-04-16T22:33:57.140 回答
2

就在今天,我通过使用phpmailer而不是 php 的内置修复了类似的主题编码问题mail

$mail = new PHPMailer(true);
$mail->IsSMTP();
$mail->CharSet = "utf8";
$mail->Subject = $mail->EncodeHeader("You won £10000000!");
....
$retval = $mail->Send();
于 2012-04-16T21:53:17.527 回答
1

通常我使用该mb_convert_encoding()功能

mb_convert_encoding($string, "UTF-8"); //AUTO DETECT AND CONVERT
mb_convert_encoding($string, "UTF-8", "latin1"); //MANUAL SET - CHANGE latin1 TO CURRENT ENCODING
于 2012-04-16T22:05:04.793 回答
0

尝试在您的电子邮件中使用 UTF-8 编码。

于 2012-04-16T21:53:47.977 回答
0

这对我有结果

<?php $subject = "=?UTF-8?B?" . base64_encode($subject) . "?="; ?>
于 2015-04-24T16:09:14.700 回答