話說大家在寫 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 = '
'.$subj.'
'.$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 了
Related