代码之家  ›  专栏  ›  技术社区  ›  Nick Dawes

无法连接到GMail SMTP(PHPMailer)-证书验证失败

  •  0
  • Nick Dawes  · 技术社区  · 7 年前

    最近在尝试通过SMTP和GMail发送邮件时遇到此错误。

    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 C:\xampp\htdocs\portal\libraries\php_mailer\class.smtp.php on line 343
    2017-12-05 09:48:03 SMTP Error: Could not connect to SMTP host. 
    2017-12-05 09:48:03 CLIENT -> SERVER: QUIT 
    2017-12-05 09:48:03 SMTP ERROR: QUIT command failed:
    

    服务器地址为 https://gg-portal.com SSL配置似乎正确(通过在线检查验证)。

    PHP编译器代码为。。。

    $mail = new PHPMailer();
    $mail->isSMTP();
    $mail->Host = "smtp.gmail.com";
    $mail->SMTPAuth = true;
    $mail->Username = $this->_config["EmailUser"];
    $mail->Password = $this->_config["EmailPass"];
    $mail->SMTPSecure = "tls";
    $mail->SMTPDebug = 1;
    $mail->Port = 587;
    $mail->FromName = $this->_config["Brand"];  
    $mail->From     = $this->_config["EmailFrom"];
    $mail->AddCC("...emailAddress...");
    $mail->Subject  = "...subject...";
    $mail->Body     = "...content...";
    $mail->IsHTML(true);  
    $mail->WordWrap = 50;
    if(!$mail->Send()) {
        echo ' Message was not sent.';
        echo 'Mailer error: ' . $mail->ErrorInfo;
    }
    

    我们已经阅读了建议证书问题的文档,尽管如前所述,SSL设置似乎很好。我已经在其他地方研究了这个问题,最流行的建议是绕过SSL(它可以工作),但是我不愿意这样做。

    'context' => [
        'ssl' => [
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true
        ]
    ]
    
    1 回复  |  直到 7 年前
        1
  •  5
  •   Jason    7 年前

    我的固定问题 我在windows php环境中通过下载更新的根证书文件并指向我的php解决了这个问题。ini文件。 问题似乎不是gmail的证书,而是根证书文件过时了,因为windows server 2012不再自动更新此文件。下载cacert。pem从这里开始: https://curl.haxx.se/docs/caextract.html . 然后是php。ini使用以下行指向它(假设您安装了openssl.dll)。

    openssl。cafile={服务器上文件的路径}\cacert。pem。

    这修复了它,我不再需要像建议的那样绕过SSL/TLS验证。最终,我需要让windows使用GPO或WSUS自动更新根证书。看见 https://serverfault.com/questions/541922/where-to-get-root-ca-certificates-for-windows-server-now-that-microsoft-no-longe