【问题标题】:The way we authenticate users no longer works, gives authentication error我们验证用户的方式不再有效,导致验证错误
【发布时间】:2017-11-05 12:40:16
【问题描述】:

我有这个 PHP 函数:

public static function smtpmailer($to, $from, $from_name, $subject, $body) { 
    $mail = new PHPMailer();  // create a new object
    $mail->IsSMTP(); // enable SMTP
    $mail->SMTPDebug = 0;  // debugging: 1 = errors and messages, 2 = messages only
    $mail->SMTPAuth = true;  // authentication enabled
    $mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for GMail
    $mail->Host = 'smtp.gmail.com';
    $mail->Port = 465; 
    $mail->Username = "someemail@gmail.com";  
    $mail->Password = "somepassword";           
    $mail->SetFrom($from, $from_name);
    $mail->Subject = $subject;
    $mail->Body = $body;
    if (is_string($to)) {
        $to = array($to);
    }
    foreach ($to as $t) {
        $mail->AddAddress($t);
    }
    if(!$mail->Send()) {
        $error = 'Mail error: '.$mail->ErrorInfo; 
        return false;
    } else {
        $error = 'Message sent!';
        return true;
    }
}

这个之前用过成功,现在却给我一个不明白的错误:

string(1553) "警告 [2] stream_socket_enable_crypto(): SSL 操作失败,代码为 1。OpenSSL 错误消息: 错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书 验证失败

有些认证没有通过,但是用户名和密码都是正确的。这之前成功地从 URL1 使用过,我将此代码复制到另一个具有 URL2 的站点。但是,发生了上述错误。当我在 URL1 上尝试此操作时,为了确定这是否是我用于电子邮件验证的 gmail 帐户中的设置问题,我遇到了同样的错误。我的问题是:我应该解决什么问题以及如何才能成功发送关于 gmail 帐户设置和我上面显示的代码的身份验证电子邮件?

编辑

此问题与在此问题上标记为的问题之间的差异:

  • 这是一个涉及 PHP 代码的问题,该问题是关于 Pythonic 问题的
  • 这个问题非常具体地涉及 gmail 的使用以及遵守 google smtp 条款和政策的愿望
  • 另一个问题是关于文件下载,这个问题是关于从给定的 gmail 地址发送电子邮件
  • 另一个问题是关于浏览器中带有证书的弹出窗口,这里的事情发生在服务器端

【问题讨论】:

  • @kabanus 我认为这不是重复的,因为这是关于以以前有效的方式满足 gmail 的要求,但由于至少我不知道的更改现在无法正常工作。
  • 您确定这不是您以前拥有的 gmail 证书或主机名更改?
  • @kabanus for URL2 我有一个不同的主机名。但是对于 URL1,我使用的是之前创建并在当时有效的证书。我也使用 URL1 进行了测试,以排除由于错误的证书和/或主机名更改而导致问题的可能性。
  • @kabanus 我已升级 PHPMailer,但没有收到以下错误:邮件错误:SMTP 连接()失败。
  • 我需要根据github.com/PHPMailer/PHPMailer/issues/149从465上的ssl切换到587上的tls。但是连接还是不成功

标签: php authentication ssl gmail


【解决方案1】:

解决的步骤如下:

  1. 确保 gmail 帐户允许从应用程序进行访问。您可以通过转到帐户的设置和Let Less Secure apps use your account 来做到这一点,

  2. 确保PHPMailer对应使用的PHP版本

  3. 我们需要以下设置:

$mail->SMTPSecure = 'tls'; // secure transfer enabled REQUIRED for GMail $mail->Host = 'smtp.gmail.com'; $mail->Port = 587;

  1. 另外,请确保我们设置了 SMTPOptions:

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

【讨论】:

  • 很好,很高兴看到你收到了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 2010-12-18
  • 2020-03-08
相关资源
最近更新 更多