【问题标题】:PHPMailer SMTP Gmail authentification errorPHPMailer SMTP Gmail 身份验证错误
【发布时间】:2015-07-23 00:23:44
【问题描述】:

我正在使用 PHPMailer 5.2.10 发送电子邮件,代码如下:

function SendGmail($to,$subj,$body)
{
    $mail = new PHPMailer(); // create a new object
    $mail->IsSMTP(); // enable SMTP
    $mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
    $mail->SMTPAuth = true; // authentication enabled
    $mail->SMTPSecure = 'ssl'; // "ssl" secure transfer enabled REQUIRED for GMail
    $mail->Host = "smtp.gmail.com";
    $mail->Port = 465; // 465 or 587
    $mail->IsHTML(true);
    $mail->Username = "admin@mydomain.ru";
    $mail->Password = "********";
    $mail->SetFrom("admin@mydomain.ru");
    $mail->Subject = $subj;
    $mail->Body = $body;
    $mail->AddAddress($to);
    return $mail->Send();
}

注意:我们使用 Google Apps,所以邮件域不是 google.com,而是其他一些,比如 mydomain.ru。

一切都很好,直到 Google 最近实施了另一项“安全增强” (AFAIK 强制 OAuth2 授权)。现在 PHPMailer->Send() 返回以下文本:

2015-05-12 06:49:15 CLIENT -> SERVER: EHLO 127.0.0.1 
2015-05-12 06:49:15 CLIENT -> SERVER: AUTH LOGIN 
2015-05-12 06:49:15 CLIENT -> SERVER: [some base64 string] 
2015-05-12 06:49:15 CLIENT -> SERVER: [some base64 string] 
2015-05-12 06:49:16 SMTP ERROR: Password command failed: 535-5.7.8 Username and Password not accepted. Learn more at 535 5.7.8 http://support.google.com/mail/bin/answer.py?answer=14257 u10sm3566045lbb.30 - gsmtp 
2015-05-12 06:49:16 SMTP Error: Could not authenticate. 
2015-05-12 06:49:16 CLIENT -> SERVER: QUIT 
2015-05-12 06:49:16 SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting bool(false) Done!

好的,我去http://support.google.com/mail/bin/answer.py?answer=14257 并执行以下操作:

访问不太安全的应用程序:*关闭/*打开” - 用于普通 gmail 帐户,

(“谷歌应用程序帐户无法访问此设置”)- 用于谷歌应用程序帐户(不是确切的文本,而是我从 google 显示的俄语翻译)。

是的,我已经尝试过 SSL 和 TLS、485 或 587 端口以及我在 stackoverflow.com 和此处找到的所有其他内容: https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting 。没有任何帮助。

PHPMailer 疑难解答页面建议使用“OAuth2 客户端类”:http://www.phpclasses.org/package/7700-PHP-Authorize-and-access-APIs-using-OAuth.html - 但我不知道如何将其集成到 PHPMailer 以及为什么 PHPMailer 开发人员尚未集成它(此类受 BSD 许可),虽然现在对于最流行的邮件服务器之一是必要的。我没有找到关于将这个 OAuth2 集成到 PHPMailer 中的文档,而且我确信我自己做不到 - 我的 PHP 知识很差。

问题是:

  1. 我怎样才能避免这个该死的 OAuth2 并像在这个“安全增强”之前那样发送电子邮件(对于谷歌应用程序帐户)? --或:

  2. 如何将上面提到的 OAuth2 类轻松集成到 PHPMailer 中? --或:

  3. 还有其他易于使用的 PHP 解决方案来使用 gmail 发送电子邮件吗?

非常感谢。

【问题讨论】:

    标签: oauth-2.0 smtp gmail phpmailer


    【解决方案1】:

    感谢您阅读文档,非常感谢!问题在于,正如您所经历的那样,谷歌强加了这种复杂的身份验证机制而没有过多地考虑其用户。它不会提高安全性,因为最终您仍然必须通过 SSL 提交用户名和密码才能获取您的令牌。 OAuth 是一种授权(你可以做什么)协议,但谷歌正在间接将它用作身份验证(你是谁)协议。

    没有人实现它的原因是,虽然它非常聪明,但 OAuth 通常使用起来令人不快且令人困惑,这就是为什么如果有人能够实现它,我们会非常高兴!

    This article 非常有用,可能构成 PHPMailer 实现的基础。虽然这增加了对 ZF2 的依赖,但对于任何其他 OAuth 实现,例如我链接到的 PHPClasses 或 this one 的实现,原理都是相同的。

    很抱歉,我无法提供更多帮助。

    更新:PHPMailer 现在支持 gmail 的 OAuth。 This article描述了怎么用,是的,还是挺不爽的!

    【讨论】:

    • 感谢您的回答和链接,但由于 PHP 技能低,我不会自己处理这一切。 OAuth2 怎么样,我的感觉完全一样:它确实没有提高了安全性,但给开发人员和用户带来了很多麻烦......
    【解决方案2】:

    我怎样才能避免这个该死的 OAuth2 并像我一样发送电子邮件 在这个“安全增强”之前(针对谷歌应用帐户)?

    你不能。与常规 Google 不同,Google Apps does not allow“不太安全的应用程序”。一旦您的帐户被标记为提高安全性,您必须切换到 OAuth2。

    如何将上面提到的OAuth2类轻松集成到PHPMailer中?

    你不能。像 Thunderbird 团队一样,有一些非常强大的 bias against OAuth2 in the PHP Mailer team。 IMO,OAuth2 是电子邮件的一大改进。

    是否有其他易于使用的 PHP 解决方案来发送电子邮件 使用 gmail 吗?

    是的。我自己的 SMTP 项目 Postman 的解决方案是从 PHP Mailer 切换到 Zend_Mail for OAuth2。 Zend_Mail 拥有原生 OAuth2 支持已经有一段时间了。

    【讨论】:

      【解决方案3】:

      糟糕,那是我的错误,我一直在错误的地方编辑代码,而不是在执行它的地方。

      奇怪,但尽管 OAuth2 和其他谷歌惊喜,我不必更改任何东西来使旧代码工作(只需更新密码)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-22
        • 2012-12-23
        • 1970-01-01
        • 2018-06-23
        • 2015-12-31
        • 2015-10-14
        • 2018-09-28
        • 2019-01-03
        相关资源
        最近更新 更多