最近使用PHPmailer发送邮件一直出现错误,显示一直无法连接到SMTP服务器。

而这个错误在之前从来没有遇到过,我用的配置也是完全没有问题,SMTP服务器、端口、地址、用户名、授权码什么的都没问题,但是无论怎么调试错误一直存在,无法发送邮件。

一、错误

错误信息如下:

PHPmailer can not connect to smtp server。

拍错顺序如下:

  • smtp服务器是否能够连接,是否正确
  • smtp用户名和授权码是否正确

    • 目前基本上都是使用授权码,而非密码
  • ssl协议的端口是否正确

  • phpinfo();看一下系统的socket和openssl是否开启

二、debug错误

开启debug,然后追踪trace,发现报错信息如下:

PHP Warning:  stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error  messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in class.smtp.php on line 327.

错误原因

php引入ssl验证,如果SSL配置不正确,则会出现此错误。

可以通过将SMTPOptions属性设置为不验证证书来恢复旧的行为。

【以前使用25端口发送,不存在SSL证书验证问题,现在强制SSL安全,而服务器没有安装SSL证书,自然无法验证,因此如果https网站,则不会出现该问题。】

三、解决错误

在代码中对 $mail->SMTPOptions进行设置。

$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);

将SMTPOptions属性设置为不验证证书来恢复旧的行为

p1.jpg

更多内容可以在stack overflow查看:

http://stackoverflow.com/questions/26827192/phpmailer-ssl3-get-server-certificatecertificate-verify-failed/