7

我已经搜索并搜索了解决此问题的方法,但无济于事。

我正在使用 php mailer 发送混合文本/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(在线 Outlook)、mac 邮件、电话等中显示良好,但在 Windows live mail 或 Microsoft Outlook 中显示不佳。

如果我手动将 Windows live Mail 中的默认字体设置为 utf8,则消息会正确显示,否则不会。如果我将电子邮件从另一个客户端转发到 Outlook 或 Windows Live,它也显示得很好。

我确定我可以找到解决方法,但我错过了什么吗?我不想依赖接收者知道如何更改消息的编码,所以我需要在电子邮件中添加一些内容以提示这些客户端识别编码吗?

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

4

3 回答 3

13

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

Content-Type: text/plain; charset=UTF-8
于 2013-05-23T13:42:52.763 回答
8
$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";
于 2013-11-22T10:14:49.180 回答
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);
于 2015-05-07T11:43:33.370 回答