个人知识管理站

分享个人生活、工作、学习过程中各种所学、所见、所闻,有趣的、好玩的、技术积累等各方面的内容。

您尚未登录。

公告

不积跬步无以至千里,不积小流无以成江海,网址:www.itecfun.com

#1 2015-05-28 10:52:54

xuyg
管理员
注册时间: 2015-01-21
帖子: 667

PHPMailer不能连接SMTP服务器的两种常见原因(Could not connect to SMTP host)

今日在配置远程服务器上的PHP邮件发送的时候,发现出现Error: Could not connect to SMTP host,换成本地服务器发送却正常,经查发现是服务器上的fsockopen被禁用,一下是网上查到的内容,记录下。
原文连接:http://blog.i1728.com/post/PHPMailer_Could_notconnect_to_SMTP_host.html

PHPmailer无法发送邮件,提示错误Error: Could not connect to SMTP host

出现这种情况一般有两种原因:
1.无法发出请求,本地设置问题
2.连接被stmp服务器拒绝,可能账号出问题,比如发信量大且频繁

第二种情况比较好解决,换一个登陆账号或者登陆IP就可以了。

针对第一种情况,执行以下脚本测试
<?php
$fp = fsockopen("smtp.163.com",25,&$errno,&$errstr,60);
if(! $fp)
    echo '$errstr   ($errno) <br> \n ';
else
    echo 'ok <br> \n ';
?>

如果报错:Warning: fsockopen() has been disabled for security reasons。
说明fsockopen函数被禁用,PHPmailer发送Email依赖此函数。
解决方法参考《fsockopen函数被禁用的解决之道》,修改class.smtp.php中的代码$this->smtp_conn = @fsockopen 为$this->smtp_conn = @pfsockopen 即可。

如果报错:php_network_getaddresses: getaddrinfo failed
可能服务器DNS设置问题,导致不能解析域名、从而找不到stmp服务器。也可能服务器所在网络环境屏蔽掉stmp服务器。如果不是自己的机器,暂时没有好的解决方法。

在之前转载的一篇文章,将
function IsSMTP() {
$this->Mailer = 'smtp';
}

改成:
function IsSMTP() {
$this->Mailer = 'SMTP';
}
这个方法是错误的,并不能解决Could not connect to SMTP host,并且会由于代码问题,邮件发送方式改变,
本文只说了常见的两种原因,但也可能是其他原因,比如stmp服务器被DDOS或者其他原因暂时不可连接。不在我等考虑范围之内故未列出

离线

页脚

©2019 YG Wang 备案号: 赣ICP备19010196号-1