PHPMailer 利用 GMail 發信
偶爾會想要用簡單的小程式來寄信,寶尼推薦 PHPMailer 因為它確實是一個簡單又好用的工具喔。而且不需要去設定 php.ini 內的 sendmail 以及 port,完完全全跟我們現行的系統平台切割。換個角度說,也稱為完完全全相容,因為檔案下載下來之後,解壓縮就可以使用,還不用更換到原先的設定值,這樣是不是很有趣呢?
1. 下載 PHPMailer 類別檔案
可以到 sourceforge.net 下載,PHPMailer 專案的連結
2. 如何安裝 PHPMailer 呢?
解壓縮後僅需要 class.phpmailer.php, class.pop3.php, class.smtp.php 三個檔案,把它放在程式欲執行的目錄即可。
3. 撰寫 PHPMailer 測試程式
將上述的程式碼存成一個檔案即可,可以測試效果然後去收信看是否正常。
4. 常見問題
延伸閱讀
[1.] PHPMailer介紹與使用-自由軟體技術支援資料庫
[2.] 如何利用 Gmail 的SMTP 發信
以下為建立步驟
1. 下載 PHPMailer 類別檔案
可以到 sourceforge.net 下載,PHPMailer 專案的連結
2. 如何安裝 PHPMailer 呢?
解壓縮後僅需要 class.phpmailer.php, class.pop3.php, class.smtp.php 三個檔案,把它放在程式欲執行的目錄即可。
3. 撰寫 PHPMailer 測試程式
<?php
// 解壓縮後的檔案位置
include("class.phpmailer.php");
// 產生 Mailer 實體
$mail = new PHPMailer();
// 設定為 SMTP 方式寄信
$mail->IsSMTP();
// SMTP 伺服器的設定,以及驗證資訊
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";
$mail->Host = "smtp.gmail.com";
$mail->Port = 465;
// 信件內容的編碼方式
$mail->CharSet = "utf-8";
// 信件處理的編碼方式
$mail->Encoding = "base64";
// SMTP 驗證的使用者資訊
$mail->Username = "XXX@gmail.com";
$mail->Password = "XXX";
// 信件內容設定
$mail->From = "XXX@gmail.com";
$mail->FromName = "系統測試";
$mail->Subject = "PHPMailer寄信測試標題";
$mail->Body = "這是一封測是信件哦!";
$mail->IsHTML(true);
// 收件人
$mail->AddAddress("YYY@gmail.com", "YYY收信人");
// 顯示訊息
if(!$mail->Send()) {
echo "Mail error: " . $mail->ErrorInfo;
}else {
echo "Mail sent";
}
?>
將上述的程式碼存成一個檔案即可,可以測試效果然後去收信看是否正常。
4. 常見問題
- 標題亂碼: 就是沒有設定郵件編碼,上述編碼在 $mail->Encoding 做設定,亦有 8bit, binary, quoted-printable 的編碼方式哦。
- 癡癡等待就是收不到信: 如果設定和程式都沒有出錯的話,很大的原因就是 ISP 之問題,例如: 你用 Hinet 上網,也就不允許使用 seednet 或是其他 ISP 的 SMTP 甚至是 GMail 的 SMTP 也會不 Work,因此把設定改成你的線路的 ISP 業者給的囉。
- 無法正確連線到 SMTP: 請先檢查一下系統平台的 PHP 模組內,是否有 openssl,然後檢察 php.ini 是否有把註解給去掉呢!?
- 是否需要 SSL: 不一定,要看 ISP 它們提供的 SMTP 服務如何驗證的,因此 $mail->SMTPSecure 可以註解起來,端看環境而言囉,不過 Google SMTP 需要 SSL 驗證,並且 Port 也要正確。
寶尼用 gmail.com 帳號以及 Google Apps 服務的帳號皆可以成功寄信哦。
延伸閱讀
[1.] PHPMailer介紹與使用-自由軟體技術支援資料庫
[2.] 如何利用 Gmail 的SMTP 發信
請問我在網路上看到與我對應的表格內容為這些就不用了?
ReplyDelete我是連到對方的mail server
maimai:
ReplyDelete你好,如果是連到對方的 mail server,就注意以下的屬性即可。
// 看對方有沒有支援,不然刪除這兩行也可以
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";
// 以下的屬性一定會有,輸入對應的
$mail->Host = "對方的Mail server DNS/IP";
$mail->Port = "對方的Mail server Port";
您再試看看,希望對您有幫助 :)
請問我照以上方法做了
ReplyDelete把phpmailer三個檔案置放在
C:\AppServ\www\system\library
opencart的後台介面會跑掉
也無法登入進去
請問是哪裡出錯了@@?
謝謝
phpmailer 的三個檔案是 php class 的部份,不包含 UI 介面的操作,可能您要先去檢查 CSS 的部份。
Delete幫您 Google 到一篇文章 http://forum.opencart.com/viewtopic.php?t=6301 或許可以直接對照完成喔!!
Delete請問一下 我發生Mail error: The following From address failed:
ReplyDelete該怎麼處理?
Hey Leo,
Delete有點久...
關於你的 error 訊息,檢查一下 $mail->From 的字串 email 是否存在試試看。
No matter how you use your multiple Google accounts it's always a time-saver to be able to log in to more than one Google account at a time. gmail support services
ReplyDelete請問opnecart的發信資料夾是哪一個呢?
ReplyDelete