PHP发送电子邮件主题 - Hotmail / Outlook显示£为£

时间:2012-04-16 21:39:45

标签: php email

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

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

5 个答案:

答案 0 :(得分:3)

问题是,客户端不知道使用什么编码来对主题进行编码。您在Content-Type标题中设置的应用程序的任何内容仅适用于电子邮件的正文,而不适用于标题。

通常会影响以下标题:

  • 主题

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

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

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

或者你可以在下面讨论讨论:

在直接使用quoted_printable_encode()之前,您需要考虑到需要将长行拆分为一定长度,并且空格需要用下划线“_”替换。

答案 1 :(得分: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

答案 2 :(得分:0)

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

$mail = new PHPMailer(true);
$mail->IsSMTP();
$mail->CharSet = "utf8";
$mail->Subject = $mail->EncodeHeader("You won £10000000!");
....
$retval = $mail->Send();

答案 3 :(得分:0)

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

答案 4 :(得分:0)

这对我的

有结果
<?php $subject = "=?UTF-8?B?" . base64_encode($subject) . "?="; ?>