(编辑:jimmy 日期: 2024/11/18 浏览:2)
最近遇到一个问题,就是在使用php的mail函数发送utf-8编码的中文邮件时标题出现乱码现象,而邮件正文却是正确的。最初以为是页面编码的问题,发现页面编码utf-8没有问题啊,找了半天原因,最后找到了问题所在。
1.使用 PEAR 的 Mail 类
PEAR 的 Mail 类可以让你选择使用 sendmail 或者 SMTP 方式发信,这样的包装好的接口很好用,你没有必要去自己重新发明轮子。
2.关于headers 中subject 的乱码
不要把任何除了 iso-8859-1 编码之外的文字直接放进subject,正确的方式是让subject 里头的文字符合RFC 2047 的规范,假设你的subject 处的文字的编码是GB2312,那么正确的subject 应该是这样的格式 先用函数base64_encode() — 使用MIME base64 对数据进行编码 是不是很简单,其实把问题分析透了,所有的问题都会迎刃而解了,希望这篇文章对大家的学习有所帮助。
$headers['subject'] = '="htmlcode">
$subject = stripslashes($the_post['Title']);
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/plain; charset=utf-8\r\n";
$headers .= "Content-Transfer-Encoding: 8bit\r\n";
$message = stripslashes(strip_tags($the_post['Content']));
mail($to, $subject, $message, $headers);
标题字符串前加编码类型例如: ="htmlcode">
<"clairelume@qq.com"; //将此电子邮件地址改为自己的。
$name = $_POST['name'];
$email = $_POST['email'];
$subject = "来自博客读者的邮件";
$subject = "=".base64_encode($subject)."";
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/plain; charset=utf-8\r\n";
$headers .= "Content-Transfer-Encoding: 8bit\r\n";
$message = $_POST['message'];
mail($to,$subject,$message,"From: ".$email."",$headers);
echo 'OK '.$name.', 您的邮件已发送。';
"text-align: center">