解决PHP使用mail()函数发送邮件标题乱码的问题

不指定 ljpbin 发布于:2010/07/31 04:21 , 技术交流 , 评论(0) , 阅读(2939) | |

相信很多webmaster都是使用mail()函数发邮件的,虽然邮件发送成功率不如SMTP 模块和MX 模块发送的效果,但是mail函数简便是他们比不了的,只要服务器支持,一切就OK。

但是很多PHP程序使用mail()函数发送邮件的时候,标题是中文的话会出现乱码。
解决方法
先用函数base64_encode() ― 使用 MIME base64 对数据进行编码
标题字符串前加编码类型例如: =?UTF-8?B?
标题字符串后加:?=
邮件header说明Content-type ― 防止邮件正文也乱码

举例:
$to = ‘root@ml.tc’;
$subject = “=?UTF-8?B?”.base64_encode(‘邮件标题’).”?=”;
$headers = ‘MIME-Version: 1.0′ . “rn”;
$headers .= ‘Content-type: text/html; charset=utf-8′ . “rn”;
// Additional headers
$headers .= ‘To: ljpbin <’”>root@ml.tc>’ . “rn”;
$headers .= ‘From: root <’”>root@ml.tc>’ . “rn”;
$headers .= ‘Reply-To: qiannian <’”>root@qiannian.org>’ . “rn”;
mail($to, $subject, $message, $headers);


具体请看:

 
  1. <?php
  2. function encode($str,$encode='utf-8'){
  3.     $str = base64_encode($str);
  4.     $str =     "=?".$encode."?B?".$str."?=";
  5.     return $str;
  6. }
  7.  
  8. function mymail($to,$subject,$message){
  9.     $subject = encode($subject);
  10.      $admin_email = 'root@ml.tc';
  11.     $admin_name = 'root';
  12.      $admin_name = encode($admin_name);
  13.  
  14.     // To send HTML mail, the Content-type header must be set
  15.  
  16.     $headers     = 'MIME-Version: 1.0' . "\r\n";
  17.     $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  18.  
  19.     // Additional headers
  20.  
  21.     $headers .= sprintf('To: %1$s',$to) . "\r\n";
  22.     $headers .= sprintf('From: %1$s <%2$s>',$admin_name,$admin_email) . "\r\n";
  23.     $status = mail($to$subject$message$headers);
  24.  
  25.     return $status;
  26.  
  27. }
Tags: , , , ,
发表评论

昵称

网址

电邮

您也可用OpenID登入:
打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]