【发布时间】: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 并执行以下操作:
-
通过网络界面登录到此帐户 - 一切正常,
-
在浏览器中打开此链接:http://www.google.com/accounts/DisplayUnlockCaptcha - 谷歌表示一切正常,
-
打开此链接:https://support.google.com/accounts/answer/6010255,然后打开此链接:https://www.google.com/settings/security/lesssecureapps,我看到以下内容:
“访问不太安全的应用程序:*关闭/*打开” - 用于普通 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 知识很差。
问题是:
-
我怎样才能避免这个该死的 OAuth2 并像在这个“安全增强”之前那样发送电子邮件(对于谷歌应用程序帐户)? --或:
-
如何将上面提到的 OAuth2 类轻松集成到 PHPMailer 中? --或:
-
还有其他易于使用的 PHP 解决方案来使用 gmail 发送电子邮件吗?
非常感谢。
【问题讨论】:
标签: oauth-2.0 smtp gmail phpmailer