話說大家在寫 PHP 的時候,一定會很常用到 mail 這個函式,畢竟一個網站一定會有很多需要用到寄信的地方,我先給大家推薦一下 PEAR::Mail_Mime 跟 PEAR::Mail 這兩個 Pear 的套件,用起來相當不錯,支援 html 跟 UTF-8 或者是 Big5 編碼,我之前寫過一篇 [PHP] 好用的 PEAR – PHP Mail and Mail_Mime,裡面寫的還蠻詳細的,不過上次有一個問題還沒解決,就是如果用 UTF-8 編碼的標題,會顯示不出來,Gmail 收到的話就會是 no subject,然後昨天用了一個非常笨的解決方法,改成把標題使用 Big5 就可以了,解決方法如下: Update:感謝 darkhero 提供解決方法: 如果要用 UTF-8 的標題:
$param['head_charset'] = 'utf-8'; $hdrs = array( 'From' => 'appleboy.tw@gmail.com', 'Subject' => '=?utf8?B?' . base64_encode($subj) . '?=', 'Content-type' => 'text/html; charset=utf-8' );先讓主機支援 PEAR:
# # FreeBSD ports 安裝 cd /usr/ports/devel/pear make install clean
然後當然是自己寫一個 send mail 函式來使用,這樣以後就呼叫這個 function 就可以了
function send_mail($to, $subj, $body) { global $db,$userdata, $board_config; include(Document_root . '/includes/Mail.php'); include(Document_root . '/includes/Mail/mime.php'); $html = ' '.$body.' '; //$file = '/home/appleboy/adwii/AB2.jpg'; $crlf = "\n"; //$param['text_charset'] = 'utf-8'; $param['html_charset'] = 'utf-8'; $param['head_charset'] = 'Big5'; $hdrs = array( 'From' => 'appleboy.tw@gmail.com', 'Subject' => iconv("UTF-8","BIG5",$subj), 'Content-type' => 'text/html; charset=utf-8' ); $mime = new Mail_mime($crlf); $mime->setTXTBody($text); $mime->setHTMLBody($html); //$mime->addAttachment($file, 'text/plain', 'AB2.jpg'); $body = $mime->get($param); $hdrs = $mime->headers($hdrs); //echo $body; $mail =& Mail::factory('mail'); $mail->send($board_config['board_email'] . ', ' . $to, $hdrs, $body); }這是我之前寫的函式,裡面標題本來不能用的,我系統跟程式都是使用 UTF-8,標題也是都利用 UTF-8 設定,可是標題顯示步來,那就改用 Big5 吧,所以是設定如下
$param['head_charset'] = 'Big5'; $hdrs = array( 'From' => 'appleboy.tw@gmail.com', 'Subject' => iconv("UTF-8","BIG5",$subj), 'Content-type' => 'text/html; charset=utf-8' );先把 $param[‘head_charset’] = ‘UTF-8’; 裡面設定改成 Big5 這樣就可以了,然後在 Subject 轉成 Big5 利用
PHP iconv 函式就可以了,然後在隨便測試一下就可以 work 了
See also
- 來聊聊 PHP & JavaScript & CSS 的 Coding Style
- 為什麼我選擇使用 Laravel Framework?
- OpenSSH 安全性漏洞 CVE-2016-0777 and CVE-2016-0778
- Laravel 搭配 Google, Facebook, Twitter 第三方 OAuth 認證
- 將 wordpress 強制使用 SSL 連線
- PHP 7 vs HHVM Benchmark 比較
- Laravel 50 個小技巧 + Laravel 5.2 新功能
- Laravel Homestead 支援 MySQL 5.7 和 Node 5.0
- PHP-FIG 新網站
- Laravel Homestead 支援 PHP 7