Posted on

在php裡使用gmail及phpmailer發信

首先先至phpmailer下載php4在用的版本
http://phpmailer.worxware.com/ <=官網
http://sourceforge.net/projects/phpmailer/files/phpmailer%20for%20php4/PHPMailer%20v2.0.4%20for%20PHP4/ <=載點
打開後在根目錄的
class.phpmailer.phpclass.smtp.php是最主要的發信類別
剩的檔案則皆為範例檔

然後下面是一個最簡單的範例(使用gmail發信)

include("class.phpmailer.php"); //匯入PHPMailer類別

$Name="Name";
$Mail="Mail@Subject.com";
$Subject="Subject";
$Sendbody="Sendbody";

$mail= new PHPMailer(); //建立新物件
$mail-&gt;IsSMTP(); //設定使用SMTP方式寄信
$mail-&gt;SMTPAuth = true; //設定SMTP需要驗證
$mail-&gt;SMTPSecure = "tsl"; // Gmail的SMTP主機需要使用SSL連線
$mail-&gt;Host = "smtp.gmail.com"; //Gamil的SMTP主機
$mail-&gt;Port = 587;  //Gamil的SMTP主機的埠號(Gmail為465)。
$mail-&gt;CharSet = "utf-8"; //郵件編碼

$mail-&gt;Username = "你的帳號@gmail.com"; //Gamil帳號
$mail-&gt;Password = "你的密碼"; //Gmail密碼

$mail-&gt;From = $Mail; //寄件者信箱
$mail-&gt;FromName = "線上客服"; //寄件者姓名

$mail-&gt;Subject ="一封線上客服信";  //郵件標題
$mail-&gt;Body = "姓名:".$Name."
信箱:".$Mail."
主題:".$Subject."
回應內容:".$Sendbody; //郵件內容

$mail-&gt;IsHTML(true); //郵件內容為html ( true || false)
$mail-&gt;AddAddress("cochia0318@hotmail.com"); //收件者郵件及名稱

if(!$mail-&gt;Send()) {
    echo "發送錯誤: " . $mail-&gt;ErrorInfo;
} else {
    echo "
感謝您的回覆,我們將會盡速處理!
";
}

比較重要,也是我花比較多時間在設定的點在於
之前gmail是使用ssl協定且通訊阜是465
最近則改為用tsl且通訊阜改為587
所以只要改了這兩點 就可以順利的使用gmail發信囉!!

不過要注意 專業版的gmail一天最多寄兩千封
免費版的一天最多寄一百封
超過上限則會被鎖帳號一天!
解決方式可以申請多個gmail帳號,每個帳號輪流發送信件
便可解決這個問題

Posted on

寄送mail的header和內文設定(utf-8)

現在大多數的信件系統都已使用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 "信件發送失敗!";//寄信失敗顯示的錯誤訊息