我继承了一个脚本,它以三种语言发送一些内容(所有内容都是相同的 – 重复)然而当收到内容字符时,我认为是UTF-8问题.
我是否正确我需要做的是将charset部分更改为utf-8,还是需要更改像7bit部分一样?
你可以看到我插入一个UTF-8参考的位置(尚未测试)
// 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;
解决方法:
您使用的是Content-Type:text / plain; charset = UTF-8告诉邮件阅读器这样的邮件部分使用UTF-8,这很好,但是…… $textContent变量包含什么?这是重要的一点.根据Content-Transfer-Encoding:7bit,它是一个7位编码,所以它不能是原始的UTF-8.但是,您没有使用任何通常用于电子邮件的7位编码.否则,将存在(例如)Content-Transfer-Encoding:quoted-printable标头.
总而言之,您需要:
>拥有包含有效UTF-8的源字符串.
>选择传输的编码,例如quoted_printable_encode().
>添加标题以告知您选择的传输编码.
您也可以按原样发送原始UTF-8并设置Content-Transfer-Encoding:8bit但我不推荐它.您只需发送非常长的行就可能违反SMTP标准.此外,您不知道这将通过什么样的遗留程序.
电子邮件比看起来更难,这就是为什么迟早你最终使用第三方库:PHP Mailer,Swift Mailer,PEAR Mail ……
标签:php,utf-8,email
来源: https://codeday.me/bug/20191001/1838364.html