带有utf-8编码的php邮件在Microsoft邮件客户端中显示不正确

时间:2013-05-23 13:21:55

标签: php email encoding utf-8

我已经搜索并搜索了解决方案,但无济于事。

我正在使用php邮件发送一个混合的文本/ html电子邮件,以utf8编码。这是相关的代码:

$headers = "From: $fromPerson\r\n" .
"Content-Transfer-Encoding: 8bit\r\n".
"Reply-To: $fromPerson\r\n" .
"Content-Type: multipart/alternative; boundary=". $mime_boundary_header. "\r\n" .
"X-Mailer: PHP/" . phpversion();

$message = "$notice_text

--$mime_boundary
Content-Type: text/plain; charset='UTF-8'
Content-Transfer-Encoding: 8bit

$textEmail

--$mime_boundary
Content-Type: text/html; charset='UTF-8'
Content-Transfer-Encoding: 8bit

$htmlEmail

--$mime_boundary--";

//mb_detect_encoding($message) returns UTF-8
$mail_sent = @mail( $to, $subject, $message, $headers);

这些消息包含西班牙语以及那些棘手的字符。电子邮件在gmail,hotmail(在线观看),mac邮件,电话等方面表现良好,但在Windows Live邮件或Microsoft Outlook中却没有。

如果我手动将Windows Live Mail中的默认字体设置为utf8,则消息会正确显示,但不会显示。如果我将来自其他客户端的电子邮件转发到Outlook或windows live,它也会显示正常。

我可以找到工作我很确定,但我错过了什么吗?我不想依赖接收器知道如何更改消息的编码,那么我是否需要添加到电子邮件中以提示这些客户端识别编码?

如果已经在其他地方处理过,我道歉,我会感激任何建议。看起来我应该继续使用PHPMailer来查看是否能解决问题,但出于个人好奇心,了解为什么会发生这种情况会很有趣......

3 个答案:

答案 0 :(得分:12)

我不确定包裹字符集的'是否必要,甚至是正确的。尝试删除它们:

Content-Type: text/plain; charset=UTF-8

答案 1 :(得分:7)

$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=UTF-8\r\n";
$headers .= "From: example@example.com\r\n";
$headers .= "Reply-To: example@example.com\r\n";

答案 2 :(得分:4)

对Riko的回答进行了修改,使得代码更加清晰。

$header_array = [
    "MIME-Version: 1.0",
    "Content-type: text/html; charset=UTF-8",
    "From: example@example.com",
    "Reply-To: example@example.com"
];

$headers = implode("\r\n", $header_array);