王忘杰

邮件发送失败:SMTP connect() failed. PHP>=5.6
优化标题:php5.6 php7 php7.1使用SMTP发邮件出现的邮件发送失败:SMTP connect() ...
扫描右侧二维码阅读全文
08
2017/06

邮件发送失败:SMTP connect() failed. PHP>=5.6

优化标题:php5.6 php7 php7.1使用SMTP发邮件出现的邮件发送失败:SMTP connect() failed.的原因和解决办法

起因
使用php7配置邮件通知插件后出现邮件发送失败:SMTP connect() failed.错误

可能原因:

VPS商封禁25端口
用户名密码等信息配置错误
fsockopen()函数被禁用

排除:

改用465端口添加ssl支持后依然报错,用户名密码配置正确,函数没有被禁用

百度无用论
通过百度无论如何都搜不到信息,其实原因很简单

百度对于新网站收录很差,同时对个人博客收录的更差,很多技术大牛的博客都只能从谷歌搜索

柳暗花明
谷歌搜索到两篇正确的文章
https://stacktrace.tech/2015-12-16/php5_6-failed-to-connect-to-server-0/
https://stacktrace.tech/2016-04-12/php5-6-ssl3_get_server_certificate-certificate-verify-failed/

部分内容摘录

$mail->SMTPOptions = array(
     'ssl' => array(
     'verify_peer' => false,
     'verify_peer_name' => false,
     'allow_self_signed' => true
     )
    );
将示例代码中这段取消注释就好了,关闭自签名证书验证
关闭之后则不会验证证书有效性了,不过在上面的stackoverflow问题中可以看到
如果关闭证书验证通过伪造证书可能导致中间人攻击。

这的确是php5.6以后版本的问题

例外
阿里云企业邮箱和腾讯企业邮箱是可以通过证书验证的,推测其证书强度足够强。

解决办法
找邮箱通知插件的作者修改插件吧,没别的办法

Last modification:December 27th, 2017 at 04:00 pm

4 comments

  1. 雨落泪尽

    最后还是你的帖子帮我解决问题了,谢了

  2. eluo

    我一直没有搞定,能帮帮忙吗? 我用的腾讯云主机.PHP7.1

    1. 王忘杰
      @eluo

      查看博客其他文章

  3. 奥兹

    ok 测试正常了。

Leave a Comment