SMTP错误:无法连接到SMTP主机。
SMTP Error: Could not connect to SMTP host 中文意思是“SMTP错误:无法连接到SMTP主机”。这种错误也可以显示为 SMTP connect() failed 或 Called Mail() without being connected 输出在调试中。这通常被称为PHPMailer问题,但几乎总是由本地DNS故障,防火墙阻塞(例如GoDaddy)或本地网络上的其他问题导致。这意味着PHPMailer无法联系您在Host属性中指定的SMTP服务器,但并不确切地说明原因。也可能是由于没有openssl加载扩展程序引起的。
在为客户搭建的 WordPress外贸网站上,相关涉及邮件收发服务的功能都无法完成。比如:邮件密码找回功能,产品询盘邮件通过功能,在网站上提交后,都显示为发送成功,但在接收邮箱中都无法收到对应邮件。经过一系列的测试后发现会出现如下错误:
SMTP ERROR: Failed to connect to server: Connection refused (111)SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
其实,WordPress出现“SMTP connect() failed. ”错误的原因,既不是 WordPress 程序本身的问题,也不是 WordPress 相关 SMTP 插件的问题,更不是所谓 PHP 的问题。而是“SMTP无法连接到SMTP主机(SMTP Error: Could not connect to SMTP host.)”的问题。
当然,导致WordPress出现“SMTP connect() failed. ”的具体原因,还是要根据网站所在服务器排查来找到。常见的情况如下:
服务器商的严格性,例如:Godaddy
美国托管服务提供商GoDaddy对发送电子邮件施加了非常严格的限制(几乎变得无用)。他们阻止出站 SMTP 到端口 25, 465 和 587 到除自己以外的所有服务器。在WPPOP的外贸建站客户中,使用Godaddy服务器搭建WordPress外贸网站时也遇到过这种情况。
如果您发现您的脚本在您的本地机器上运行,而不是在您将其上传到Godaddy时,则会发生在您身上。Godaddy的解决方案极其糟糕:您必须通过他们的服务器进行发送,并禁用所有的安全功能,用户名和密码(很好,呵呵?!),给你这个PHPMailer的配置:
$ mail – > isSMTP();
$ mail – > Host = ‘ relay-hosting.secureserver.net ‘ ;
$ mail – > Port = 25 ;
$ mail – > SMTPAuth = false ;
$ mail – > SMTPSecure = false ;
GoDaddy 会拒绝发送 From 属于任何 aol,gmail,yahoo,hotmail,live,aim,msn 等域名的地址(参见他们的文档)。这是因为所有这些域名部署 SPF 和 DKIM 防伪措施,伪造你的地址是伪造的。
您可能会发现切换到更开明的托管服务提供商更容易,比如Bluehost等排名靠前的有实力的服务商,都是默认支持类似邮件收发等常用服务器功能的。
SELinux阻塞
如果您看到类似的错误SMTP -> ERROR: Failed to connect to server: Permission denied (13),您可能会遇到阻止PHP或Web服务器发送电子邮件的SELinux。这在RedHat / Fedora / Centos上尤其可能。使用该getsebool命令,我们可以检查httpd守护进程是否允许通过网络建立连接并发送电子邮件:
getsebool httpd_can_sendmail
getsebool httpd_can_network_connect
这个命令将返回一个布尔值或关闭。如果关闭,我们可以打开它:
sudo setsebool -P httpd_can_sendmail 1
sudo setsebool -P httpd_can_network_connect 1
如果您通过fastcgi运行PHP-FPM,则可能需要将其应用于fpm守护进程而不是httpd。
解决方法
如果WordPress网站碰到邮件收发无法实现的情况,网站主机服务商不支持的话,我们可以通过第三方插件类实现,比如:WP Mail SMTP 和 Easy WP SMTP 来实现解决WordPress网站无法发送邮件的问题。