PHPMailer介紹與使用
介紹
再撰寫PHP網站時,發送e-mail是一個經常使用的功能,PHP本身就有提供寄送e-amil的功能可以使用,就是利用mail( )這個函式,有關mail( )如何使用可參考:http://tw2.php.net/mail。
但是PHP內建的mail( )功能並不完善,以我所碰到的經驗為例,最基本的就是只能寄送文字e-mail,但時至今日,很多e-mail大多以HTML格式為主,除了能夠插入圖之外,e-mail的文字顯示也具有較豐富的變化。
而在PHP中,有一個相當好用且為開放原始碼的寄送e-mail模組-PHPMailer,這個模組的功能較為完整,其功能包括:
* 寄送e-mail時指定多個收件人,寄送副本與密件副本
* 支援多種e-mail郵件編碼包括:
o 8bit
o base64
o binary
o quoted-printable
* 支援SMTP驗證
* 支援備援SMTP伺服器
* e-mail可夾帶附檔
* 支援HTML格式的e-mail
* 自定義e-mail表頭(Header)
* 可在郵件中放置圖片
* 相容的SMTP伺服器包括:
o Sendmail
o Qmail
o Postfix
o Imail
o Exchange
* 跨平台
本篇技術文章就針對這個模組做一個介紹以及如何使用。
需求
需要PHP 5以上
下載與安裝
PHPMailer的官方網站為:http://phpmailer.codeworxtech.com/
使用者可直接在這邊下載,PHPMailer模組可直接在sourceforge.net這個有名的網站下載使用。目前針對PHP 5的最新版本為PHPMailer v2.2.1。
下載並解壓縮之後,裡面最主要提供e-mail功能的是下列這3個PHP檔:
* class.phpmailer.php
* class.pop3.php
* class.smtp.php
而下載的檔案中也包含了這個模組的文件以及使用範例,所以使用上來說也相當簡單。
未避免麻煩,建議把這3個檔案都放置在一起。
如何使用
首先,當然要把class.phpmailer.php include進來使用:
接著要實體化一個PHPMailer物件,所有要寄送的e-mail接由這物件進行處理:
假設你要寄送的e-mail的內容為body.html,則可利用getFile( )把內容加入進來,通常由於THML是以”\”做為換行符號,所以可再做一些加工處理,這邊是將”\”皆以空白字元來代替:
getFile('contents.html');
$body = eregi_replace("[\]",'',$body);
?>
至此已經將所要寄送的e-mail內容準備完畢。
PHPMailer預設寄送e-mail的是使用PHP內建的mail( ),若要使用其他方式,例如要使用SMTP…等,則必須要再進行額外的設定。以我為例,由於我利用本身這台伺服器。經由SMTP來發送信件(所以我有我自己的寄件者e-mail格式),所以還需要進行下列設定:
IsSMTP( );
//使用SMTP寄送信件
$mail->Host = "localhost";
//指定發送信件的伺服器
$mail->SMTPAuth = false;
//是否使用SMTP驗證
$mail->Port = 25;
//設定使用的SMTP port
?>
另外,如果你要指定PHPMailer使用其他方式來寄送e-mail,例如SendMail,如下所示:
IsSendmail();
//指定PHPMailer使用SendMail來寄送e-mail
?>
接著我要對這封信的主旨、寄件者或收件者進行設定。
From = "www-data@support.oss.org.tw";
//指定寄件者的email位址
$mail->FromName = "自由軟體組";
//寄件者的名稱sender's name
$mail->Subject = "這是主旨";
//email的主旨
$mail->AltBody = $altbody;
//這個設定主要是預防收件者無法顯示HTML信件時的替代文字
$mail->WordWrap = 50;
//設定一行最多為50個字元,即每50個字自動斷行
?>
如一開始所說,PHPMailer可以指定e-mail的編碼:
CharSet="utf-8";
//設定e-mail編碼
$mail->Encoding = "base64";
//設定信件編碼,大部分郵件工具都支援此編碼方式
?>
再來就是把剛剛的信件內容加入到信件中:
MsgHTML($body);
//信件內容
$mail->AddReplyTo("info@iii.org.tw", "Info");
//設定回函
?>
至此已經完成信件內容與寄件者的設定,再來就是設定信件寄送給誰:
AddAddress("xxx@iii.org.tw");
//指定收件者的email位址
$mail->AddAddress("yyy@iii.org.tw", "yyy");
//指定收件者的email位址,並且設定收件者名稱
$mail->AddBCC("zzz@iii.org.tw", "zzz");
//使用密件副本
$mail->AddAttachment("/var/tmp/file.tar.gz");
//新增附件檔案
$mail->AddAttachment("/tmp/image.jpg", "new.jpg");
//附件也可以更改名稱
?>
到這邊已經完成大部分設定動作,在最後設定將信件以HTML格式寄出:
IsHTML(true); //設定信件內容為HTML
?>
使用PHPMailer寄送gmail信件
有相當多人使用Gmail,而PHPMailer也可以寄送gmail信件,在設定上其實與上述並無太大的差別,以下列出需額外設定的部分:
getFile('contents.html');
$body = eregi_replace("[\]",'',$body);
$mail->IsSMTP();
$mail->SMTPAuth = true;
//需使用SMTP驗證
$mail->SMTPSecure = "ssl";
// 利用SSL連線到伺服器
$mail->Host = "smtp.gmail.com";
//當然啦,信件寄送主機就是GMAIL
$mail->Port = 465;
//指定SMTP port
$mail->Username = "yourname@gmail.com";
//GMAIL帳號
$mail->Password = "password";
// GMAIL密碼
//以下有關信件的部分與之前一章大同小異,故省略之。
?>
這樣就可以寄送Gmail信件了,是不是相當簡單呢?