2010年1月13日星期三

UTF8_SendMail 完美改革版(转)

摘自:http://blog.sina.com.cn/s/blog_5907aede010006rg.html

UTF8_SendMail 完美改革版特色:
1.网路信箱看不到内文的问题排除
2.网路信箱「阅读自动转码」:信件开启之後直接呈现清楚的中文
  ,排除网路信箱看信件必须手动转码的问题
3.outlookexpress 直接呈现清楚中文

能够做的通通做了!!!
这应该是utf-8编码回信架构的完美版

P.S. 个人认为,还是用bgi5 或者gb2312 编码的回函比较好!!以客为尊嘛!UTF8_SendMail 只是不得已的替代方案!

代码:
function UTF8_SendMail($From,$To, $Subject, $Text){
 global $currentlang;
 if($currentlang=="chinese-utf8")
 {
  $Text=makeClickable($Text);
  $Text="".$Text;
  
  $OB="----=_OuterBoundary_000";
  $IB="----=_InnerBoundery_001";
  $Html=$Html?$Html:preg_replace("/\n/","
",$Text);
  
  $headers ="MIME-Version: 1.0\r\n";
  $headers.="From: ".$FromName." <".$From.">\n";
  $headers.="To: ".$ToName." <".$To.">\n";
  $headers.="Reply-To: ".$FromName." <".$From.">\n";
  $headers.="X-Priority: 1\n";
  $headers.="X-MSMail-Priority: High\n";
  $headers.="X-Mailer: PHP Mailer\n";
  $headers.="Content-Type: multipart/mixed;\n\tboundary=\"".$OB."\"\n";
  $Msg ="This is a multi-part message in MIME format.\n";
  $Msg.="\n--".$OB."\n";
  $Msg.="Content-Type: multipart/alternative;\n\tboundary=\"".$IB."\"\n\n";
  $Msg.="\n--".$IB."\n";
  $Msg.="Content-Type: text/plain;\n\tcharset=\"utf-8\"\n";
  $Msg.="Content-Transfer-Encoding: quoted-printable\n\n";
  $Msg.=$Text."\n\n";
  $Msg.="\n--".$IB."\n";
  $Msg.="Content-Type: text/html;\n\tcharset=\"utf-8\"\n";
  $Msg.="Content-Transfer-Encoding: base64\n\n";
  $Msg.=chunk_split(base64_encode($Html))."\n\n";
  $Msg.="\n--".$IB."--\n";
  $Msg.="\n--".$OB."--\n";
 }else{
  $Msg = $Text;
  $headers = "From: $From\nX-Mailer: PHP/" . phpversion();
 }

mail($To,$Subject,$Msg,$headers);
}


function makeClickable($text) {
 $ret = eregi_replace(" ([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])", " \\1://\\2\\3", $text);
 $ret = eregi_replace(" (([a-z0-9_]|\\-|\\.)+@([^[:space:]]*)([[:alnum:]-]))", " \\1", $ret);
 return $ret;
}




 UTF8_SendMail   使用方法请叁阅这里

没有评论: