我正在使用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并执行以下操作:
通过网络界面登录此帐户 - 一切正常,
在浏览器中打开此链接: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许可下) ),现在有必要为一个最流行的邮件服务器。我没有找到关于将它集成到PHPMailer中的OAuth2的文档,我确信我自己也做不到 - 我的PHP知识很差。
问题是:
如何避免这个该死的OAuth2并发送电子邮件,就像我在“安全增强”(谷歌应用程序帐户的)之前所做的那样?的 - OR:
如何轻松地将上面提到的OAuth2类集成到PHPMailer中?的 - OR:
是否还有其他易于使用的PHP解决方案来使用Gmail发送电子邮件?
提前多多感谢。
答案 0 :(得分:2)
感谢您阅读文档,非常感谢!问题在于谷歌已经强加了这种复杂的身份验证机制,而没有像你所经历的那样过多地关注它的用户。它不会提高安全性,因为最终您仍需要通过SSL提交用户名和密码才能获得令牌。 OAuth是授权(你可以做什么)协议,但谷歌间接使用它作为身份验证(你是谁)协议。
没有人实施它的原因是虽然它非常聪明,但OAuth通常会让人感到不愉快和难以理解,这就是为什么如果有人开始实施它就会感到非常高兴!
This article非常有用,可能构成PHPMailer实现的基础。虽然这增加了对ZF2的依赖性,但其他任何OAuth实现的原则都是相同的,例如我链接到的{或this one的PHPClasses。
对不起,我对此没什么帮助。
更新:PHPMailer现在支持OAuth for gmail。 This article描述了如何使用它,是的,它仍然非常不愉快!
答案 1 :(得分:1)
我怎样才能避免这个该死的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了很长一段时间。
答案 2 :(得分:0)
哎呀,这是我的错误,我一直在错误的地方编辑代码,而不是在执行它的那个代码。
奇怪,但是尽管OAuth2和其他谷歌惊喜,我还是没有改变任何东西来使旧代码工作(只是更新密码)。