phplist及phpmailer(組合使用)通過gmail發(fā)送郵件的配置方法
本文實(shí)例講述了phplist及phpmailer通過gmail發(fā)送郵件的配置方法。分享給大家供大家參考,具體如下:
一般來說,只要你使用的不是gmail郵箱,那么利用phplist發(fā)送郵件只要按照前面《PHP的郵件群發(fā)系統(tǒng)phplist配置方法詳細(xì)總結(jié)》配置就夠了。但若你如同我一樣不幸,必須使用gmail這種有ssl驗(yàn)證的郵箱,那么恭喜你,我的不幸現(xiàn)在已然成為你的幸運(yùn),經(jīng)過數(shù)天的嘗試,我終于成功將gmail與phplist組合在了一起?,F(xiàn)將經(jīng)驗(yàn)分享于此,希望對(duì)各位同我一般境遇的同志有用。另外,phplist的核心是phpmailer,我提出的解決方案也主要是圍繞phpmailer的,所以需要使用phpmailer通過gmail發(fā)送郵件而不能成功者也可以參考我的方法。
首先按照《PHP的郵件群發(fā)系統(tǒng)phplist配置方法詳細(xì)總結(jié)》中的配置方法通過gmail發(fā)送郵件,在發(fā)送測試郵件時(shí)phplist會(huì)報(bào)告發(fā)送郵件失敗,在事件日志(eventlog)里會(huì)有錯(cuò)誤提示“Mailer Error: The following From address failed:...”,說是發(fā)件人地址存在問題。難道是已經(jīng)連上smtp服務(wù)器,但是發(fā)送郵件過程中存在問題嗎?可以用一個(gè)方法試驗(yàn)一下到底連沒連上smtp服務(wù)器:我把config.php文件中的郵箱帳戶密碼故意填錯(cuò),結(jié)果發(fā)送測試郵件時(shí)仍然報(bào)同樣的錯(cuò)誤,看來是根本就沒連上smtp服務(wù)器,這phplist的錯(cuò)誤報(bào)告也太……
知道是沒連上smtp服務(wù)器那就說明問題出現(xiàn)在phplist發(fā)送郵件的核心——另一款著名開源軟件phpmailer。
上網(wǎng)查了一下phpmailer發(fā)送gmail郵件的資料,發(fā)現(xiàn)人們說舊版本的phpmailer不支持ssl驗(yàn)證,不能連接gmail的smtp服務(wù)器,而此問題已在新版的phpmailer中解決了。
打開lists/admin/phpmailer/ChangeLog.txt,發(fā)現(xiàn)最新版的phplist自帶的phpmailer的版本是1.73,是2005年出的,確實(shí)不算新。于是上phpmailer的官網(wǎng)下了個(gè)最新的5.1的。
我想先研究一下新版的phpmailer是如何解決ssl驗(yàn)證的問題的,于是看了一下其自帶的一些說明文檔,碰巧發(fā)現(xiàn)在PHPMailer_v5.1/docs下有一個(gè)use_gmail.txt,看來是官方比較重視gmail問題,專門出了一個(gè)demo供人參考。打開一看也確實(shí)是一個(gè)完整的php頁面文件,基本上修改了文件擴(kuò)展名、郵箱用戶名和密碼就能使用,但如果僅僅如此修改,在訪問該測試頁面時(shí)會(huì)報(bào)錯(cuò),也不知官方出的demo怎么會(huì)有這樣的錯(cuò)誤,居然會(huì)調(diào)用一個(gè)未定義的函數(shù),而且有一些沒有必要的成分。我們只不過想先測試一下能否正常發(fā)送郵件,所以我將其修改為:
<?php
// example on using PHPMailer with GMAIL
include("class.phpmailer.php");
include("class.smtp.php"); // note, this is optional - gets called from main class if not already loaded
$mail = new PHPMailer();
$body = "test";
$mail->IsSMTP();
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->SMTPSecure = "ssl"; // sets the prefix to the servier
$mail->Host = "smtp.gmail.com"; // sets GMAIL as the SMTP server
$mail->Port = 465; // set the SMTP port
$mail->Username = "myname@gmail.com"; // GMAIL username
$mail->Password = "mypassword"; // GMAIL password
$mail->From = "myname@gmail.com";
$mail->FromName = "Webmaster";
$mail->Subject = "This is the subject";
$mail->AltBody = "This is the body when user views in plain text format"; //Text Body
$mail->WordWrap = 50; // set word wrap
$mail->MsgHTML($body);
$mail->AddReplyTo("myname@gmail.com","Webmaster");
$mail->AddAddress("myname@gmail.com","First Last");
$mail->IsHTML(true); // send as HTML
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message has been sent";
}
?>
結(jié)果發(fā)現(xiàn)訪問此頁面時(shí)仍然報(bào)錯(cuò),真是令人無奈,官方給的demo怎么會(huì)無法運(yùn)行?
這時(shí)我忽然想起PHPMailer_v5.1/docs下有一個(gè)名為Note_for_SMTP_debugging.txt的文件,現(xiàn)在我不正是在為連不上smtp服務(wù)器而煩惱嗎,不妨看一下里面提供的調(diào)試方法。
打開文件看完第一行就眼前一亮,這正是我所需要的!其實(shí)使用方法也很簡單,只要在
$mail->IsSMTP();
前插入
$mail->SMTPDebug = 1;
便可在報(bào)錯(cuò)同時(shí)得到更見詳細(xì)的錯(cuò)誤信息。真是好東西^_^
按照這樣修改完后,我在訪問頁面時(shí)得到了更加詳細(xì)的說明——“SMTP -> ERROR: Failed to connect to server: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP? (28593608)”。
原來如此,于是我打開了我的php配置文件(C://Windows/php.ini)搜索ssl,果然搜到一個(gè)關(guān)于ssl的擴(kuò)展
;extension=php_openssl.dll
它沒有被打開。去掉其前面用于注釋的“;”,然后重啟服務(wù)器,再次訪問測試頁面use_gmail.php,仍然是同樣的錯(cuò)誤提示。
沒辦法了,我上網(wǎng)查了一下關(guān)于php以及apache的ssl配置的文章,發(fā)現(xiàn)僅僅是將ssl擴(kuò)展模塊開啟是不夠的,還要對(duì)openssl進(jìn)行配置,在Windows環(huán)境下配置方法倒是很簡單——找到php安裝目錄下的ssleay32.dll和libeay32.dll,將這二者復(fù)制到windows下的system32目錄中即可(在php.ini中開啟extension=php_openssl.dll還是必要的)。當(dāng)然,不想“污染”system32目錄的同志們可以用修改環(huán)境變量的方法,只要讓ssleay32.dll和libeay32.dll在系統(tǒng)路徑下就可以了。(如果你使用的不是winidows操作系統(tǒng),請(qǐng)上網(wǎng)查找針對(duì)你的操作系統(tǒng)的配置ssl的方法,應(yīng)該不難找到)
這回再訪問use_gmail.php發(fā)現(xiàn)可以成功發(fā)送了!
在此基礎(chǔ)上,我們的phplist的問題也可以解決了:用新版phpmailer中的class.phpmailer.php和class.smtp.php覆蓋lists/admin/phpmailer中的對(duì)應(yīng)文件,然后修改lists/admin/class.phplistmailer.php中36行左右處的
$this->SMTPAuth = true;
$this->Helo = getConfig("website");
$this->Host = PHPMAILERHOST;
為:
$this->IsSMTP(); # Add
$this->SMTPAuth = true;
$this->SMTPSecure = "ssl"; # Add
$this->Helo = getConfig("website");
$this->Host = PHPMAILERHOST;
$this->Port = 465 # Add
其中phpmailer默認(rèn)端口號(hào)為25,是大多數(shù)smtp服務(wù)器的端口號(hào),但是gmail使用的端口號(hào)是465,所以要重新設(shè)置。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《PHP基本語法入門教程》、《php操作office文檔技巧總結(jié)(包括word,excel,access,ppt)》、《php日期與時(shí)間用法總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- ThinkPHP3.2利用QQ郵箱/163郵箱通過PHPMailer發(fā)送郵件的方法
- phpmailer發(fā)送郵件功能
- PHPMailer使用QQ郵箱實(shí)現(xiàn)郵件發(fā)送功能
- Linux服務(wù)器下PHPMailer發(fā)送郵件失敗的問題解決
- PHP插件PHPMailer發(fā)送郵件功能
- 使用PHPMailer發(fā)送郵件實(shí)例
- PHPMailer發(fā)送郵件
- phpmailer綁定郵箱的實(shí)現(xiàn)方法
- php使用phpmailer發(fā)送郵件實(shí)例解析
- phpmailer簡單發(fā)送郵件的方法(附phpmailer源碼下載)
- 匯總PHPmailer群發(fā)Gmail的常見問題
- PHP借助phpmailer發(fā)送郵件
- thinkphp使用phpmailer發(fā)送郵件的方法
- 使用PHPMailer實(shí)現(xiàn)郵件發(fā)送代碼分享
- PHP郵件發(fā)送類PHPMailer用法實(shí)例詳解
- phpmailer發(fā)送郵件之后,返回收件人是否閱讀了郵件的方法
- phpmailer在服務(wù)器上不能正常發(fā)送郵件的解決辦法
- 實(shí)例分析PHP中PHPMailer發(fā)郵件
相關(guān)文章
PHP數(shù)組操作——獲取數(shù)組最后一個(gè)值的方法
這篇文章主要介紹了PHP數(shù)組操作——獲取數(shù)組最后一個(gè)值的方法,需要的朋友可以參考下2015-04-04
php正則preg_replace_callback函數(shù)用法實(shí)例
這篇文章主要介紹了php正則preg_replace_callback函數(shù)用法,實(shí)例分析了preg_replace_callback函數(shù)進(jìn)行正則替換的相關(guān)技巧,需要的朋友可以參考下2015-06-06
PHP 7.1中利用OpenSSL代替Mcrypt加解密的方法詳解
最近在開發(fā)微信公眾號(hào)功能的時(shí)候發(fā)現(xiàn)在PHP 7.1中Mcrypt已經(jīng)被棄用了,無奈只能找對(duì)應(yīng)的解決方法來替代,所以這篇文章主要給大家介紹了關(guān)于在PHP 7.1中利用OpenSSL代替Mcrypt加解密的相關(guān)資料,需要的朋友可以參考下。2017-11-11
php如何控制用戶對(duì)圖片的訪問 PHP禁止圖片盜鏈
這篇文章主要介紹了php如何控制用戶對(duì)圖片的訪問 PHP禁止圖片盜鏈,需要的朋友可以參考下2016-03-03
PHP在字符斷點(diǎn)處截?cái)辔淖值膶?shí)現(xiàn)代碼
所謂斷字 (word break),即一個(gè)單詞可在轉(zhuǎn)行時(shí)斷開的地方。這一函數(shù)將在斷字處截?cái)嘧址?/div> 2011-04-04
PHP 清空varnish 緩存的詳解(包括指定站點(diǎn)下的)
本篇文章是對(duì)清空varnish的緩存(包括指定站點(diǎn)下的)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06最新評(píng)論

