您好,登錄后才能下訂單哦!
使用phpmailer類smtp發送郵件不成功;
排查思路
首先在代碼中,我們打開SMTPDebug
$mail = new PHPMailer(); //建立郵件發送類
$mail->SMTPDebug = true; //要把SMTPDebug 的屬性設置為true
如果郵件發送不成功,則會提示錯誤信息
我這次報的錯誤是
Failed to connect to server
following From address failed
開啟DEBUG提示:ERROR: Failed to connect to server: (0) 既然是連接不上,那么我們就看是靠什么連接的,經詢問度娘得知連接smtp服務器是靠 fsockopen連接的,那么我們來看看這個函數是否被禁用
在PHP.ini里查找
1,allow_url_fopen = On 查看該選項是否是On,是Off時函數肯定是不能用,改成On.
如果還不能用,怎么辦?因為上面的配置,是說fopen是打開狀態的,不是說打開了就能用,還要允許使用才能用,好,我們看看禁用的方法里有沒有fsockopen
2,disable_functions
disable_functions 這個后面,有很多被禁用的方法,有fsockopen,好恭喜你,找到答案了,將它去掉,OK,重啟 apache,搞掂
還不行?同樣是在php.ini文件中,看看這個打開沒有?
extension=php_openssl.dll如果已打開,再看看php目錄下的兩個擴展文件有沒有拷到c/:windows/System32下
libeay32.dll ssleay32.dll
另外:不改動服務器,只改代碼的情況,也可以一試,注=>我沒試過
方法1:將fsockopen函數替換成pfsockopen函數
因為pfsockopen的參數與fsockopen基本一致,
所以只需要將@fsockopen替換成@pfsockopen就可以了。如果運氣好 pfsockopen沒被禁用,ok通過
方法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);
這樣就可以了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。