又是一個工作上碰到的問題,需要寫一個簡單的 email 發送功能。雖然是基本功能,不過常見的作法還是藉由 PHPMailer Library 來達成。不過這個案子因為寄信頻率很低,想說用 PHP 內建的 mail() 就可以處理了。但是人算不如天算,怎知 mail() 成功了,但是卻是一堆亂碼,標題、寄件人欄位都是亂碼….. 囧
經過一番 Google Search 的奮戰,找到一個很 tricky 的解決方法。將會出現亂碼的文字用以下方式處理….
"=?UTF-8?B?".base64_encode(" 會出現亂碼的文字 ")."?="
這樣用 GMAIL 收到信的時候就可以看到正常的文字了。
mail function 範例如下…
function sendMail($recipient){ $subject = "=?UTF-8?B?".base64_encode("信件標題")."?="; $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html; charset=UTF-8\r\n"; $headers .= "From: "."=?UTF-8?B?".base64_encode("寄件人 ")."?="; $headers .= "<sender@email.com>"; $message = '<p><font size="3" face="新細明體">信件內文</font></p> '; return mail($recipient, $subject, $message, $headers); }
順便補充一下,為了送出 html 格式的郵件,必須在 header 中指定 Content-type: text/html 才行。
PHP 有 mb_encode_mimeheader 來為雙位元文字編碼,不過以此方式編碼的信件在 Gmail 中仍顯示亂碼,所以只好用比較 tricky 的方法來處理了。
Leave a Reply