วันพุธที่ 15 ธันวาคม พ.ศ. 2553

ส่งเมล์ให้เป็นภาษาไทยโดยใช้ php send mail UTF-8

โปรแกรมนี้เป็นโปรแกรมที่ส่ง mail แบบ multipart โดยส่งทั้ง format text/plain และ text/html ไปพร้อมๆ กันครับ จึงไม่ต้องกังวลว่าผู้รับเมล์จะอ่าน html หรือ text อย่างใดอย่างหนึ่งไม่ได้
ผ่านการทดสอบจาก webisite email ดังต่อไปนี้ hotmail.com, yahoo.com, gmail.com และ fastmail.fm

( ต้องบันทึกโค้ดนี้เป็น utf8 ครับถึงจะได้ค่าภาษาไทยที่ถูกต้อง )

<?php

//define('DEBUG',true);

function ct($ct,$a){
$s = "Content-Type: $ct";
foreach($a as $k=>$v){
$s .= ";\r\n\t$k=\"$v\"";
}
return "$s\r\n";
}
function cte($cte){
return "Content-Transfer-Encoding: $cte\r\n";
}
function enc($s){
return '=?UTF-8?B?'.base64_encode($s).'?=';
}

function mail_utf8($to,$from,$subject,$text,$html)
{
$hash = md5(date('r', time()));
$b1 = 'b1_'.$hash; $bb1 = "\r\n--$b1\r\n"; $bb1e = "\r\n--$b1--\r\n";
$b2 = 'b2_'.$hash; $bb2 = "\r\n--$b2\r\n"; $bb2e = "\r\n--$b2--\r\n";
if (strpos($from,'<')){
list($name,$email)=explode('<',$from);
$from = enc($name).' <'.$email;
}
if (strpos($to,'<')){
list($name,$email)=explode('<',$to);
$to = enc($name).' <'.$email;
}
$h = "From: $from\r\n";
$h .= "Reply-To: $from\r\n";
$h .= "MIME-Version: 1.0\r\n";
$h .= ct('multipart/related',array(
'type'=>'text/html',
'boundary'=>$b1
));
$m = $bb1;
$m .= ct('multipart/alternative',array('boundary'=>$b2));
$m .= $bb2;
$m .= ct('text/plain',array('charset'=>'UTF-8'));
$m .= cte('8bit');
$m .= "\r\n$text\r\n";
$m .= $bb2;
$m .= ct('text/html',array('charset'=>'UTF-8'));
$m .= cte('8bit');
$m .= "\r\n$html\r\n";
$m .= $bb2e;
$m .= $bb1e;
$subject = enc($subject);

if (defined('DEBUG')){
echo "<pre>\r\n";
echo "$to\r\n$subject\r\n$h\r\n$m";
echo '</pre>';
} else {
return @mail( $to, $subject, $m, $h );
}
}

mail_utf8
(
'คุณสวัสดีครับ <sendto@sendtodomainname.com>',
'คุณสวัสดีค่ะ <myemail@mydomainname.com>',
'หัวข้อ',
'text ครับ',
'<body><b>html</b>ครับ</body>'
);

?>

ไม่มีความคิดเห็น:

แสดงความคิดเห็น