phpmailer發送郵件 SMTP Error: Could not authenticate 錯誤

來源:互聯網
上載者:User

今天在使用phpmailer發送smtp郵件時提示 SMTP Error: Could not authenticate 錯誤,其中密碼帳號都是正確的,郵箱也設定開啟了SMTP功能。

上Google百度了一遍,有的說是伺服器禁用了連接埠,有的說把class.phpmailer.php中的

 代碼如下 複製代碼

function IsSMTP() {
$this->Mailer = 'smtp';
}改為

function IsSMTP() {
$this->Mailer = 'SMTP';
}

測試以後還是不行,心中鬱悶的一米。最後在一篇部落格中找到瞭解決方法,先分享出來讓更多遇到同樣問題的人能得到協助!


這個錯誤說明虛擬機器主機不支援PHPMailer預設調用的fsockopen函數,找到class.smtp.php檔案,搜尋fsockopen,就找到了這樣一段代碼:

 代碼如下 複製代碼

// connect to the smtp server
$this->smtp_conn = @fsockopen($host,// the host of the server
    $port,// the port to use
    $errno,   // error number if any
    $errstr,  // error message if any
    $tval);   // give up after ? secs

方法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:也要查看郵箱中“設定郵件地址黑名單”及“收信規則”,有時系統會自動將一些郵箱自動加入黑名單的

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.