Oauth 2.0 PHPMailer SMTP Gmail身份验证错误

Oauth 2.0 PHPMailer SMTP Gmail身份验证错误,oauth-2.0,smtp,gmail,phpmailer,Oauth 2.0,Smtp,Gmail,Phpmailer,我正在使用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

我正在使用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.com,而是其他一些,比如mydomain.ru

一切正常,直到谷歌最近实施了另一项“安全增强”(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!
好的,我转到并执行以下操作:

  • 通过web界面登录到此帐户-一切正常

  • 在浏览器中打开此链接:-谷歌表示一切正常

  • 打开此链接:然后打开此链接:我看到以下内容:

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

(“谷歌应用程序账户无法访问此设置”)-谷歌应用程序账户(不是确切的文本,而是我的俄语翻译,如谷歌所示)

是的,我尝试了SSL和TLS、485或587端口以及在stackoverflow.com和此处找到的所有其他端口:。没有任何帮助

PHPMailer疑难解答页面建议使用“OAuth2客户机类”:-但我不知道如何将其集成到PHPMailer中,以及为什么PHPMailer开发人员还没有集成它(该类在BSD许可证下),而对于最流行的邮件服务器之一,它现在是必需的。我没有找到关于将此OAuth2集成到PHPMailer中的文档,我确信我自己做不到——我的PHP知识很差

问题是:

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

  • 如何轻松地将上述OAuth2类集成到PHPMailer中--或:

  • 是否有其他易于使用的PHP解决方案可以使用gmail发送电子邮件


  • 非常感谢。

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

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

    非常有帮助,可能构成PHPMailer实现的基础。尽管这增加了对ZF2的依赖性,但对于任何其他OAuth实现,如我链接到或的PHPClasses中的实现,原则都是相同的

    对不起,在这件事上我帮不了什么忙


    更新:PHPMailer现在支持gmail的OAuth。描述了如何使用它,是的,它仍然是相当不愉快的

    哎呀,那是我的错误,我一直在错误的地方编辑代码,而不是在执行代码的地方

    奇怪的是,尽管有OAuth2和其他谷歌的惊喜,我没有改变任何东西来让旧代码工作(只是更新密码)

    我怎么才能避免这个该死的OAuth2,像我那样发送电子邮件呢 在此“安全增强”之前(针对谷歌应用程序帐户)

    你不能。与普通谷歌不同,谷歌应用程序“不太安全”。一旦您的帐户被标记为额外的安全性,您必须切换到OAuth2

    如何轻松地将上述OAuth2类集成到PHPMailer中

    你不能。像雷鸟队一样,有一些相当强大的队伍。在国际海事组织,OAuth2是电子邮件的一大改进

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


    对。我自己的SMTP项目的解决方案是从PHP Mailer切换到。Zend_Mail已经有了本地OAuth2支持很长一段时间了。

    感谢您的回答和链接,但由于PHP技能较低,我不会独自处理这些问题。关于OAuth2,我的感觉完全一样:它并没有提高安全性,但给开发人员和用户带来了很多麻烦。。。