今天在使用phpmailer發(fā)送郵件時(shí)居然提示SMTP Error: Could not authenticate,這個(gè)感覺是smtp設(shè)置的問題,下面我在網(wǎng)上找到了幾種解決辦法。
今天在使用phpmailer發(fā)送smtp郵件時(shí)提示 SMTP Error: Could not authenticate 錯(cuò)誤,其中密碼帳號(hào)都是正確的,郵箱也設(shè)置開啟了SMTP功能。
上谷歌百度了一遍,有的說是服務(wù)器禁用了端口,有的說把class.phpmailer.php中的,代碼如下:
測試以后還是不行,心中郁悶的一米,最后在一篇博客中找到了解決方法,先分享出來讓更多遇到同樣問題的人能得到幫助!
這個(gè)錯(cuò)誤說明虛擬主機(jī)不支持PHPMailer默認(rèn)調(diào)用的fsockopen函數(shù),找到class.smtp.php文件,搜索fsockopen,就找到了這樣一段代碼:
方法1:將fsockopen函數(shù)替換成pfsockopen函數(shù),首先,在php.ini中去掉下面的兩個(gè)分號(hào)
;extension=php_sockets.dll
;extension=php_openssl.dll
然后重啟一下,因?yàn)閜fsockopen的參數(shù)與fsockopen基本一致,所以只需要將@fsockopen替換成@pfsockopen就可以了。
方法2:使用stream_socket_client函數(shù)
一般fsockopen()被禁,pfsockopen也有可能被禁,所以這里介紹另一個(gè)函數(shù)stream_socket_client(),stream_socket_client的參數(shù)與fsockopen有所不同,所以代碼要修改為如下:
$this->smtp_conn = stream_socket_client("tcp://".$host.":".$port, $errno, $errstr, $tval);
這樣就可以了,如果上面辦法還是沒有解決可能是郵箱自動(dòng)過濾你機(jī)器自動(dòng)登錄郵箱發(fā)郵件了哦,我是使用下面辦法解決的,剛開始使用的qq的帳號(hào),提示上面錯(cuò)誤。換成新注冊(cè)的163帳號(hào)可以正常發(fā)送。之后換了一個(gè)qq等級(jí)比較高的帳號(hào),這下可以正常發(fā)送,沒有報(bào)任何錯(cuò)誤。因?yàn)槭占擞玫氖莙q郵箱帳號(hào),所以發(fā)件帳號(hào)用qq的郵箱比較好,這樣發(fā)送過多不會(huì)輕易的被攔截或判為垃圾郵件。所以結(jié)論就是配置中使用一個(gè)qq等級(jí)比較高的帳號(hào)(我的一個(gè)小號(hào)等級(jí)2個(gè)月亮可以正常使用,當(dāng)然等級(jí)越高越好,)
結(jié)論:也要查看郵箱中“設(shè)置郵件地址黑名單”及“收信規(guī)則”,有時(shí)系統(tǒng)會(huì)自動(dòng)將一些郵箱自動(dòng)加入黑名單的