目前,当发送包含西班牙口音的PHP电子邮件时,电子邮件的呈现方式如下:
Ω₯ζλZΫiz«’Ό*'΅ινO*^rνz{
我正在设置以下标题:
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
$headers .= "X-Priority: 3\r\n";
$headers .= "X-Mailer: PHP". phpversion() ."\r\n";
示例正文消息是:
Estudio bíblico en Web Church Connect
我还设置了html的字符集:
$message = '
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>WebChurchConnect</title>
</head>
<body>
';
任何想法都表示赞赏。
感谢。
答案 0 :(得分:2)
电子邮件只接受ASCII字符,因为许多MTA未配备正确中继其他消息。你应该想到像洋葱这样的MIME-E-Mails :(它们闻起来,它们让你哭),而且它们有层。 HTML邮件(内层)仅在处理完邮件的纯文本(外层)后才会被解码。
您需要在“外部”图层中显式编码任何非ASCII字符。您可以使用Content-Transfer-Encoding
标头执行此操作,该标头可以设置为base64
或quoted-printable
(某些现代MTA也支持8bit
或binary
但这些必须是明确地设定,支持仍然不像人们希望的那样普遍在2014年)。当然,此标头后面的MIME部分也需要使用指定的方法进行实际编码。幸运的是,Base64-Encoding只能拨打base64_encode
。
或者,由于您的消息是HTML格式(并且您似乎并不关心提供明文替代方案 - 您应该这样做),您也可以使用HTML的转义机制(例如í
而不是{{1}但是,Base64通常更安全,因为它可以免受MTA的攻击,这些MTA会在78个字符后分解长行。
答案 1 :(得分:1)
尝试使用PHPMailer或SwiftMailer。像这样的问题已经解决了,所有的东西都经过了测试,并且更容易让你使用。