Cannot connenct to relay host smtp.163.com (php邮件发送失败)

时间:2021-01-09 18:12:04
真是无语 搞了那么久,网上全部都说是 服务器php.ini 配置的问题,全tm都是抄的,误人子弟,好在 发现 该好贴,不过 阿里云 也真是 操蛋,屏蔽了25端口也不说,好吧!可能是我 没注意到。 扯淡完毕,下面是 解决问题的正文:

织梦自带了邮件发送功能,当我们在后台配置好了smtp信息后,如果还是发送邮件失败,可以通过下面的方法来定位。

PS:关注结果的站长们可以直接看第4、5步的结论,本例导致织梦邮件发送不出去的原因是阿里云禁用了25端口。
 
1、登陆dede网站后台,找到include/mail.class.php,先做好备份,然后对该文件做一些修改以打开debug日志,可以在后台用vi命令直接修改,也可以将该文件用ftp工具下载到本地电脑,修改后再上传覆盖,修改点如下:
a)修改$this->debug = TRUE; 表示打开debug日志
b)修改$this->log_file = "/yjdata/www/mail.log"; 表示输出日志到哪个地方
Cannot connenct to relay host smtp.163.com (php邮件发送失败)
 
2、在后台,到上面$this->log_file指定的目录下用下面的命令创建mail.log文件,同时修改文件权限,命令如下
cd /yjdata/www/
touch mail.log
chmod 777 mail.log
 
3、上面的步骤完成后,再次做操作触发邮件的发送,比如注册用户、找回密码等等,这时候可以去查看日志,看看到底是什么原因,比如日志内容显示如下,Cannot connenct to relay host smtp.qq.com,然后就连接超时了。
Cannot connenct to relay host smtp.163.com (php邮件发送失败)

4、网上很多类似问题的帖子说问题出现在服务器的环境配置上,检查方法如下:找到php.ini,查看两个参数,一个是allow_url_fopen,这个参数要设置成on;另一个是disable_functions,如果这个参数后面出现了fsock,fsockopen,则需要把这两个函数名去掉,完成后重启apache。不过这里不是这个原因导致的,因为这里的错误是,Error: Connection timed out (110),是连接超时,说明fsock方法是可用的,只是连不上邮件服务器;而前面说的服务器配置问题的错误会是Error: (),空,说明fsock方法不可用。按前面说的检查方法检查后发现配置的没问题,说明不是这个原因导致的。
 
5、那连接超时是什么原因导致的呢,一般我们配置的smtp服务器端口都是25,不过有的服务器或空间提供商把25端口给禁用了,比如阿里云就给禁用了,这个可以找相应的提供商确认一下。如果真是禁用了25端口,可以采用465端口,这个端口很多主流的邮件服务商像网易邮箱、QQ邮箱、阿里云邮箱也都支持,采用了465端口,织梦后台需要如下这么配置,注意, smtp服务器地址前面一定要加上ssl://,否则还是不可用。
Cannot connenct to relay host smtp.163.com (php邮件发送失败)
 
6、这时候再重试,可以发送邮件了,查看日志显示如下
Cannot connenct to relay host smtp.163.com (php邮件发送失败)
 
7、注意,问题解决后,记得还原include/mail.class.php,不在记录debug日志。

原文地址: https://www.imoban.me/baike/5.html