当我使用 PHP 邮件发送包含 £ 的电子邮件时,它在 Outlook/hotmail 中显示为 £。在 Gmail/thunderbird 中很好。
知道如何解决这个问题吗?
问题是,客户端不知道使用什么编码来编码主题。无论您的应用程序在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()
需要考虑到长行需要按一定长度分割,空格需要用下划线“_”代替。
就在今天,我通过使用phpmailer而不是 php 的内置修复了类似的主题编码问题mail
:
$mail = new PHPMailer(true);
$mail->IsSMTP();
$mail->CharSet = "utf8";
$mail->Subject = $mail->EncodeHeader("You won £10000000!");
....
$retval = $mail->Send();
通常我使用该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
尝试在您的电子邮件中使用 UTF-8 编码。
这对我有结果
<?php $subject = "=?UTF-8?B?" . base64_encode($subject) . "?="; ?>