《PHP實例:phplist及phpmailer(組合使用)通過gmail發送郵件的配置方法》要點:
本文介紹了PHP實例:phplist及phpmailer(組合使用)通過gmail發送郵件的配置方法,希望對您有用。如果有疑問,可以聯系我們。
PHP編程本文實例講述了phplist及phpmailer通過gmail發送郵件的配置辦法.分享給大家供大家參考,具體如下:
PHP編程一般來說,只要你使用的不是gmail郵箱,那么利用phplist發送郵件只要依照前面《PHP的郵件群發系統phplist配置方法詳細總結》配置就夠了.但若你如同我一樣不幸,必須使用gmail這種有ssl驗證的郵箱,那么恭喜你,我的不幸現在已然成為你的幸運,經過數天的嘗試,我終于成功將gmail與phplist組合在了一起.現將經驗分享于此,希望對各位同我一般境遇的同志有用.另外,phplist的核心是phpmailer,我提出的解決方案也主要是圍繞phpmailer的,所以需要使用phpmailer通過gmail發送郵件而不能成功者也可以參考我的方法.
PHP編程首先依照《PHP的郵件群發系統phplist配置方法詳細總結》中的配置方法通過gmail發送郵件,在發送測試郵件時phplist會報告發送郵件失敗,在事件日志(eventlog)里會有錯誤提示“Mailer Error: The following From address failed:...”,說是發件人地址存在問題.難道是已經連上smtp服務器,但是發送郵件過程中存在問題嗎?可以用一個方法試驗一下到底連沒連上smtp服務器:我把config.php文件中的郵箱帳戶密碼故意填錯,結果發送測試郵件時仍然報同樣的錯誤,看來是根本就沒連上smtp服務器,這phplist的錯誤報告也太……
PHP編程知道是沒連上smtp服務器那就說明問題出現在phplist發送郵件的核心――另一款著名開源軟件phpmailer.
PHP編程上網查了一下phpmailer發送gmail郵件的資料,發現人們說舊版本的phpmailer不支持ssl驗證,不能連接gmail的smtp服務器,而此問題已在新版的phpmailer中辦理了.
PHP編程打開lists/admin/phpmailer/ChangeLog.txt,發現最新版的phplist自帶的phpmailer的版本是1.73,是2005年出的,確實不算新.于是上phpmailer的官網下了個最新的5.1的.
PHP編程我想先研究一下新版的phpmailer是如何解決ssl驗證的問題的,于是看了一下其自帶的一些說明文檔,碰巧發現在PHPMailer_v5.1/docs下有一個use_gmail.txt,看來是官方比較重視gmail問題,專門出了一個demo供人參考.打開一看也確實是一個完整的php頁面文件,基本上修改了文件擴展名、郵箱用戶名和暗碼就能使用,但如果僅僅如此修改,在訪問該測試頁面時會報錯,也不知官方出的demo怎么會有這樣的錯誤,居然會調用一個未定義的函數,而且有一些沒有必要的成分.我們只不過想先測試一下能否正常發送郵件,所以我將其修改為:
PHP編程
<?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";
}
?>
PHP編程結果發現拜訪此頁面時仍然報錯,真是令人無奈,官方給的demo怎么會無法運行?
PHP編程這時我忽然想起PHPMailer_v5.1/docs下有一個名為Note_for_SMTP_debugging.txt的文件,現在我不正是在為連不上smtp服務器而懊惱嗎,不妨看一下里面提供的調試方法.
PHP編程打開文件看完第一行就眼前一亮,這正是我所需要的!其實使用辦法也很簡單,只要在
PHP編程
$mail->IsSMTP();
PHP編程前插入
PHP編程
$mail->SMTPDebug = 1;
PHP編程便可在報錯同時得到更見詳細的錯誤信息.真是好東西^_^
PHP編程依照這樣修改完后,我在訪問頁面時得到了更加詳細的說明――“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編程原來如此,于是我打開了我的php配置文件(C://Windows/php.ini)搜索ssl,果然搜到一個關于ssl的擴展
PHP編程
;extension=php_openssl.dll
PHP編程它沒有被打開.去掉其前面用于注釋的“;”,然后重啟服務器,再次拜訪測試頁面use_gmail.php,仍然是同樣的錯誤提示.
PHP編程沒方法了,我上網查了一下關于php以及apache的ssl配置的文章,發現僅僅是將ssl擴展模塊開啟是不夠的,還要對openssl進行配置,在Windows環境下配置方法倒是很簡單――找到php安裝目錄下的ssleay32.dll和libeay32.dll,將這二者復制到windows下的system32目錄中即可(在php.ini中開啟extension=php_openssl.dll還是必要的).當然,不想“污染”system32目錄的同志們可以用修改環境變量的方法,只要讓ssleay32.dll和libeay32.dll在系統路徑下就可以了.(如果你使用的不是winidows操作系統,請上網查找針對你的操作系統的配置ssl的方法,應該不難找到)
PHP編程這回再拜訪use_gmail.php發現可以成功發送了!
PHP編程在此基礎上,我們的phplist的問題也可以辦理了:用新版phpmailer中的class.phpmailer.php和class.smtp.php覆蓋lists/admin/phpmailer中的對應文件,然后修改lists/admin/class.phplistmailer.php中36行左右處的
PHP編程
$this->SMTPAuth = true;
$this->Helo = getConfig("website");
$this->Host = PHPMAILERHOST;
PHP編程為:
PHP編程
$this->IsSMTP(); # Add
$this->SMTPAuth = true;
$this->SMTPSecure = "ssl"; # Add
$this->Helo = getConfig("website");
$this->Host = PHPMAILERHOST;
$this->Port = 465 # Add
PHP編程其中phpmailer默認端口號為25,是大多數smtp服務器的端口號,但是gmail使用的端口號是465,所以要重新設置.
PHP編程更多關于PHP相關內容感興趣的讀者可查看本站專題:《PHP網絡編程技巧總結》、《PHP基本語法入門教程》、《php操作office文檔技巧總結(包括word,excel,access,ppt)》、《php日期與時間用法總結》、《php面向對象程序設計入門教程》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》
PHP編程希望本文所述對大家PHP程序設計有所贊助.
《PHP實例:phplist及phpmailer(組合使用)通過gmail發送郵件的配置方法》是否對您有啟發,歡迎查看更多與《PHP實例:phplist及phpmailer(組合使用)通過gmail發送郵件的配置方法》相關教程,學精學透。維易PHP學院為您提供精彩教程。