今天在使用phpmailer發送smtp郵件時提示 SMTP Error: Could not authenticate 錯誤,其中密碼帳號都是正確的,郵箱也設置開啟了SMTP功能。
上谷歌百度了一遍,有的說是服務器禁用了端口,有的說把class.phpmailer.php中的
代碼如下 | 復制代碼 |
function IsSMTP() { function IsSMTP() { |
測試以后還是不行,心中郁悶的一米。最后在一篇博客中找到了解決方法,先分享出來讓更多遇到同樣問題的人能得到幫助!
這個錯誤說明虛擬主機不支持PHPMailer默認調用的fsockopen函數,找到class.smtp.php文件,搜索fsockopen,就找到了這樣一段代碼:
代碼如下 | 復制代碼 |
// connect to the smtp server |
方法1:將fsockopen函數替換成pfsockopen函數
首先,在php.ini中去掉下面的兩個分號
;extension=php_sockets.dll
;extension=php_openssl.dll
然后重啟一下
因為pfsockopen的參數與fsockopen基本一致,所以只需要將@fsockopen替換成@pfsockopen就可以了。
方法2:使用stream_socket_client函數
一般fsockopen()被禁,pfsockopen也有可能被禁,所以這里介紹另一個函數stream_socket_client()。
stream_socket_client的參數與fsockopen有所不同,所以代碼要修改為:
代碼如下 | 復制代碼 |
$this->smtp_conn = stream_socket_client("tcp://".$host.":".$port, $errno, $errstr, $tval); |
這樣就可以了。
如果上面辦法還是沒有解決可能是郵箱自動過濾你機器自動登錄郵箱發郵件了哦,我是使用下面辦法解決的
剛開始使用的qq的帳號,提示上面錯誤。換成新注冊的163帳號可以正常發送。
之后換了一個qq等級比較高的帳號,這下可以正常發送,沒有報任何錯誤。
因為收件人用的是qq郵箱帳號,所以發件帳號用qq的郵箱比較好,這樣發送過多不會輕易的被攔截或判為垃圾郵件。
所以結論就是配置中使用一個qq等級比較高的帳號(我的一個小號等級2個月亮可以正常使用,當然等級越高越好,)
ps:也要查看郵箱中“設置郵件地址黑名單”及“收信規則”,有時系統會自動將一些郵箱自動加入黑名單的
新聞熱點
疑難解答