我继承了一个脚本,该脚本以三种语言发送一些内容(所有内容都在重复上)但是当收到内容字符时,我认为是UTF-8问题。
我是否正确我需要做的就是将charset部分更改为utf-8,还是需要像7bit部分一样进行更改?
你可以看到我插入一个UTF-8参考(尚未测试)的位置
这里有一些http://bitprison.net/php_mail_utf-8_subject_and_message似乎引用了基本编码,但我不确定我是否需要它?
// Contruct message body.
$body = "";
// Add message for non-mime clients.
$body .= "This is a multi-part message in MIME format.\n";
// Add text body.
$body .= "\n--$boundary\nContent-Type: text/plain; charset=UTF-8; format=flowed\nContent-Transfer-Encoding: 7bit\n\n" . $textContent;
// Add HTML body.
$body .= "\n--$boundary\nContent-Type: text/html; charset=ISO-8859-1; format=flowed\nContent-Transfer-Encoding: 7bit\n\n" . $htmlContent;
mail( $row["email"], "Update Your ArtsDB Listing", $body, $headers );
我在这里看了另一篇文章的例子。
$body .= "\n--$boundary\nContent-Type: text/plain; charset=UTF-8; format=flowed\nContent-Transfer-Encoding: 8bit\n\n" . $textContent;
// Add HTML body.
$body .= "\n--$boundary\nContent-Type: text/html; charset=UTF-8; format=flowed\nContent-Transfer-Encoding: 8bit\n\n" . $htmlContent;
答案 0 :(得分:6)
您正在使用Content-Type: text/plain; charset=UTF-8
告诉邮件阅读器这样的邮件部分使用UTF-8,这很好,但是...... $textContent
变量包含什么?这是重要的一点。根据{{1}},它是一个7位编码,所以它不能是原始的UTF-8。但是,您没有使用任何通常用于电子邮件的7位编码。否则,会有一个(例如)Content-Transfer-Encoding: 7bit
标题。
总而言之,您需要:
你也可以按原样发送原始UTF-8并设置Content-Transfer-Encoding: quoted-printable
,但我不推荐它。您只需发送非常长的行就可能违反SMTP标准。此外,您不知道这将会是什么样的遗留程序。
电子邮件比看上去更难,这就是为什么迟早你最终会使用第三方库:PHP Mailer,Swift Mailer,PEAR Mail ......
答案 1 :(得分:1)
Content-Transfer-Encoding:7位
这没有意义 - 7位数据和8 +位表示之间没有直接映射。您需要更改mime标头以说明您正在使用的编码。
对于SMTP,传输编码应为7位ascii字符集。要更改你的utf8数据,你需要编码这个 - 常见的编码是base64和引用打印(PHP为两者提供编码和解码fns)。
为什么不使用像phpmailer或swiftmailer
这样的好文章