提问者:小点点

PHPMailer SMTP Gmail认证错误


我正在使用phpmailer5.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();
}

注意:我们使用谷歌应用程序,因此邮件域不是谷歌。com,但还有一些,比如说,mydomain。鲁。

一切都很好,直到谷歌最近实施了另一项“安全增强”(AFAIK迫使OAuth2授权)。现在PHPMailer-

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并进行以下工作:

>

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

    在浏览器中打开此链接:http://www.google.com/accounts/DisplayUnlockCaptcha-谷歌表示一切正常,

    打开此链接:https://support.google.com/accounts/answer/6010255然后这个链接:https://www.google.com/settings/security/lesssecureapps我看到以下情况:

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

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

    是的,我尝试了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知识很差。

    问题是:

    >

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

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

    非常感谢。


  • 共3个答案

    匿名用户

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

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

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

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

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

    匿名用户

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

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

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

    你不能。就像雷鸟团队一样,PHP Mailer团队中对OAuth2有着相当强烈的偏见。在国际海事组织,OAuth2是电子邮件的一大改进。

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

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

    匿名用户

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

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