現在大多數的信件系統都已使用utf-8
之前寄出utf-8的信件常會發生信件標題和headers資訊變成亂碼
查了老半天網路
原來不支援主要的原因在於,電子郵件標準格式中
表頭的部分不允許使用雙位元的文字
所以,使用mb_encode_mimeheader()函式
將雙位元文字編碼為單位元字串。
以下為headers的範例
mb_internal_encoding('UTF-8'); $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n"; $headers .= 'From: '.mb_encode_mimeheader('標題) .'<test@test.test> ' . "\r\n"; mail($to, mb_encode_mimeheader($title, 'UTF-8'), $content, $headers);
這樣便可成功解決「郵件標題」或「寄件者」是亂碼的問題
=======================================
若是電腦沒有安裝mb_encode_mineheader()的函式庫
則可以使用下面的程式碼來寄信
$to =" yourmail@your.com "; //收件者 $subject="=?UTF-8?B?".base64_encode(‘主旨‘)."?=";//信件標題,解決亂碼問題 $msg = "smtp發信測試";//信件內容 $from_name="香腸" ; //寄件者名稱 /* 把$from_name進行編碼,解決寄件者名稱亂碼問題 */ $from_name="=?UTF-8?B?".base64_encode($from_name)."?="; $headers = "From:".$from_name." <admin@your.com>"; //寄件者名稱和信箱 if(mail("$to", "$subject", "$msg", "$headers")) echo "信件已經發送成功。";//寄信成功就會顯示的提示訊息 else echo "信件發送失敗!";//寄信失敗顯示的錯誤訊息