PHPMailer是一個郵件發送插件有很多朋友使用它來發郵件,但也有不少朋友在使用期PHPMailer發郵件時就碰到”SMTP 錯誤:無法連接到 SMTP 主機“錯(www.49028c.com)誤了,出現這種問題我們從幾個點來分享,一個是郵箱配置有問題,另一個是我們的php.ini環境中有些函數沒開啟導致的,下面我來給各位詳細介紹一下問題的排除技巧.
原因分析:出現這個問題說明無法解析 SMTP 主機 <主機 id> 的名稱.
解決辦法,這個要看郵箱支付不支持pop3發送與接收郵件這個可以郵件官方看看,如QQ郵件.
phpmailer error SMTP Error: Could not connect to SMTP host Could not instantiate mail function
弄了半天,原來是不同郵件系統要求的smtp請求不同,但是都允許大寫,有些不支持小寫,比如網易,騰訊的郵箱.
原來的設置:
- $mail->SMTPAuth = true;
- $mail->Mailer = "smtp";
- $mail->Host = "smtp.qq.com";
- $mail->Port = 25; //設置郵件服務器的端口,默認為25
- $mail->Username = "8515888@qq.com";
- $mail->Password = "xxxxxxxxxx";
把smtp改成大寫就可以了:
$mail->Mailer = "SMTP";
分析問題:
還有大家就是使用了空間而不是服務器這樣有可能像fsockopen、pfsockopen都禁用了,因為phpmailer需要使用fsockopen、pfsockopen才可以發郵件所以就會有問題了.
解決辦法:找到class.smtp.php文件,大約在文件的128行吧,有這樣一段代碼:
- // connect to the smtp server
- $th(www.49028c.com)is->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函數
因為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);
這樣就可以了.
新聞熱點
疑難解答