最近有个项目从虚拟主机迁到云主机上,换了个环境,原来用于找回密码的发送邮件功能居然用不了了!反应极慢,致使tenginx报504网关超时错误。php
初次百度,看了别人发的文章,我觉得是php版本的问题,原来虚拟主机用的是PHP5.5,如今是7.0。天真的我又下了5.5版本的源码,编译安装了个php5.5,用这个版本的php-fpm替代7.0版本的php-fpm,结果问题依然。python
再次问度娘,有人说是sockets扩展的问题,说安装这个扩展。用php -m查看了下,sockets扩展是有的。多试一下老是没错的,抱着这个心理,我试了编译安装两个版本的sockets扩展,仍是无济于事。nginx
有的说法是fsockopen的问题,说要改下phpmailer的代码,查看了下phpmailer的代码,已是OK的。laravel
不关php版本和sockets扩展的问题,我把疑点放在phpmailer上,网上传言swiftmailer效率要比phpmailer要好。因而下载了swiftmailer,写了个测试代码,在命令行下跑,结果仍是超时。不过此次看到了报错,总算有点眉目了,是 不能跟smtp.mxhichina.com创建链接。莫非是dns解析问题?我用ip替换这个地址后仍是同样错误,看来跟dns解析无关。
发邮件报错的部份内容:swift
Fatal error: Uncaught exception 'Swift_TransportException' with message 'Connection could not be established with host smtp.mxhichina.com [Connection timed out #110]
phpmailer,swiftmailer都不行,我怀疑我用的是假的php,连个邮件都发送不了。因而借用了一段发邮件的python代码,测试,报的也是链接超时。看来这个问题跟语言无关,我怀疑是centos系统设置的问题。windows
我在本机win7下测试,能够正常发邮件。看来还真跟系统有关,离问题解决又近了些。我在windows下用telnet链接smtp.mxhichina.com的25端口,能够正常连上,可在centos下连不上。centos
继续百度,有的文章说发邮件也有可能用465端口了,用的是smtps。原来一直用的都是25端口。试了下在centos下用telnet链接465端口,能够正常链接。因而把发邮件的php代码改为用这个端口,也是失败,不过报的是另一个错误了。好好的一个云主机,居然发邮件都不行!一怒之下果断向阿里云提交工单。
第种报错信息:服务器
Fatal error: Uncaught exception 'Swift_TransportException' with message 'Expected response code 220 but got code "", with message ""'
提交工单完毕,心中缓了一下。一个问题折腾了这么久,感受不想就这样放弃了,因而按这个错误信息百度,居然在stackoverflow上有人问跟这个如出一辙的问题,正好有人解答,不过是在laravel框架下的,大概就是更改配置什么的,经过tls,要把端口设为587。我把代码中的25端口改为587,运行,果真能够发送!!问题就此解决!!框架
原来阿里云的邮箱服务器的smtps协议用的是587端口,不知为什么一样的参数,之前在虚拟主机中用25端口也是正常的。百度了下“smtp.mxhichina.com 端口”,阿里云的帮助文档是这样的: socket
465试过不能够,也没提到587,感受很受伤!!
转自:http://blog.csdn.net/chunyuan314/article/details/62237626