在用phpmailer发送邮件时,本地都是好的,到服务器上就不行了,提示发送成功,但受不到邮件,firebug查看提示连接不上邮件服务器。在网上找了很久,最多的说法是这样:
更改phpmailer的class.smtp.php文件:
$this->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
改为:
$this->smtp_conn = @stream_socket_client( $host.':'.$port, // the host of the server
$errno, // error number if any
$errstr, // error message if any
$tval); // give up after ? secs
PHP版本应高于5.0,因为较早版本没有stream_socket_client函数。
按照上面改了,还是不行,然后对phpmailer一步步跟踪,发现问题还是出在连接163邮件服务器这里,在测试服务器上运行也正常,然后就将测试环境和生产环境比较,发现唯一的区别就是测试服务器是用域名访问的,而生产环境是用IP地址访问的,改成域名访问就正常了,至于为什么IP地址就不行,这就不知道了。反复测试后发现,生产环境的域名解析有点问题,有时会自动将URL中的域名转换IP地址。
总结一下邮件发送失败的几种原因:
1、SSL连接,有些邮件不需要SSL,如163,;有些需要,如gmail;
2、端口,163邮箱的端口是25,具体端口号应和你使用的邮箱一致;
3、fsockopen函数,按照上面方法改成stream_socket_client;
4、URL中的地址是域名还是IP地址,一定要是域名。