我正在使用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发送电子邮件吗?
非常感谢。
感谢您阅读文档,非常感谢!问题是,正如你所经历的那样,谷歌在不考虑其用户的情况下强加了这种复杂的身份验证机制。这并不能提高安全性,因为最终您仍然需要通过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和其他谷歌的惊喜,我没有改变任何东西来让旧代码工作(只是更新密码)。