如何避免谷歌邮件服务器要求我通过浏览器登录?

45

我正在尝试使用由Google Apps配置的电子邮件地址从Django发送电子邮件,我的settings.py文件中的配置看起来像这样:

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'contact@mydomain.com'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

当我尝试发送电子邮件时使用:

from django.core.mail import send_mail

send_mail("Happy new year", "We wish you the best for 3001",
    "contact@mydomain.com", ["someuser@gmail.com"])

我遇到了以下错误:

SMTPAuthenticationError: 
(535, '5.7.1 Please log in with your web browser and then try again. 
 Learn more at
 5.7.1 https://support.google.com/mail/bin/answer.py?answer=78754 k2sm758604obl.14')

由于我正在使用没有图形用户界面的远程服务器,因此甚至无法尝试从浏览器登录。


1
我使用完全相同的设置(当然除了用户名/密码),并且它对我有效。您是否使用标准的Gmail地址,还是使用自己域名的Google应用程序帐户?这是我能想到可能会导致此问题的唯一事情。还要确保您的凭据是正确的。这就是链接后面的Google帮助页面告诉您要做的事情。 - Danilo Bargen
我正在使用带有自己域名的 Google 应用账号。经过几次尝试(并通过浏览器登录),它实际上在我的家庭电脑上运行良好。但是我无法从远程服务器上使其运行。 - Juan Enrique Muñoz Zolotoochin
你有按照谷歌支持链接中发布的三个谷歌审核步骤吗?(解锁验证码) - dani herrera
1
当我从家里的电脑访问这些链接时,它们只会将我重定向到电子邮件帐户。看起来我需要从出现问题的机器上访问它们,但是我无法在那台机器上访问图形界面。 - Juan Enrique Muñoz Zolotoochin
对于任何遇到配置所需的HTTP/S隧道问题的人:http://superuser.com/questions/490632/tunneling-https-traffic-via-a-putty-ssl-tunnel-with-socks - ripper234
实际解决方案 https://dev59.com/ZJTfa4cB1Zd3GeqPLAu3#43465118 - Abhishek Gupta
16个回答

63

当我尝试从PHP脚本中检索邮件时,这对我起了作用。 - Ian Dunn
哇 - 这让我能够发送我的 Gmail Python 脚本。谢谢! - Super_John
当我在Digital Ocean上运行node-imap脚本时,这对我起作用了。 - Harrison Cramer
这个在我身处加州快乐的伯克利用Heroku上的Rails框架运行,非常好用☺️ - Ethan Lee
3
仍可在2020年使用。这赢得了巫术魔法奖。 - scott
显示剩余5条评论

32

在一个cucumber/capybara/selenium测试中,我已经折腾了几个小时 - 发现了一个愚蠢的东西,可以永久解决这个错误,保证

这个错误大家都非常熟悉:

I've been messing with this for a couple of hours within a cucumber/capybara/selenium test - discovered something stupid which will fix this error for good, guaranteed

The all too familiar error:

Please log in via your web browser: https://support.google.com/mail/accounts/answer/78754 (Failure) (Net::IMAP::NoResponseError)

结果发现,需要更改两个“允许较不安全的应用程序”切换开关才能允许来自未知设备/IMAP的登录。

其中一个在这里https://myaccount.google.com/security?pli=1#connectedapps(页面底部)

还有一个在这里https://www.google.com/settings/security/lesssecureapps

两个该死的切换开关都需要更改才能消除此错误消息。

编辑:来自用户Milothicus (https://stackoverflow.com/users/3538026/milothicus) 的建议,在myaccount.google.com中,在“登录和安全性”下,选择“已连接的应用程序和网站”。这也有一个选项“允许较不安全的应用程序”。打开此选项后,我的服务器现在可以向我发送自动电子邮件。


这是我在尝试从Ubuntu 16.04上的Perl脚本发送电子邮件时唯一有效的方法。 - Håkon Hægland
哇!通常谷歌的用户界面都很好,但两个名字相同的切换按钮……糟糕透了!感谢您提供答案。 - mpb

14

7
我收到了来自Google Apps支持的以下回复:
您需要打开Outbound relay。操作步骤如下:
1.登录google.com/a/yourdomain.com账户; 2.点击设置选项卡,然后选择左侧列中的电子邮件; 3.在Outbound relay部分,选择允许用户在配置外部SMTP“from”地址时通过外部SMTP发送邮件(该地址托管在域之外); 4.单击保存更改。
他们还提供了一个帮助链接:http://support.google.com/a/bin/answer.py?hl=en&answer=176054 打开Outbound relay并使用代理登录Webmail一次后(感谢@DaniloBargen和@joshcartme),问题得到了解决。我阅读了说明Outbound relay是什么,但我真的不确定为什么需要它(我不认为我正在使用外部SMTP服务器)。
因为我不确定这是否解决了问题,所以在得到确认之前,我不会将该回复标记为已接受。

今天我们遇到了这个问题,而且我们在出站中继中已经勾选了正确的设置。 - ripper234
5
自从您上次更新答案以来,我认为这个过程已经改变了。我遇到了相同的错误,我的做法是通过浏览器登录到我的帐户,然后访问https://accounts.google.com/DisplayUnlockCaptcha(我从[这里](https://support.google.com/mail/answer/14257?hl=en)进入),然后通过Django发送电子邮件。现在客户端已被识别,我可以继续通过Django发送邮件到该地址。 - Bentley4

5

选项1(这对我有用):

当我尝试从我的网络应用程序发送电子邮件时,出现错误请使用您的Web浏览器登录,然后重试。了解更多等 ,我从我的本地计算机通过浏览器登录到电子邮件。

登录后,顶部有一个黄色通知栏询问我是否允许外部应用程序访问我的邮件。 我确认此操作,并要求在接下来的10分钟内从应用程序登录帐户。 这将把该应用程序加入白名单。

选项2:

如果选项1不适用于您,请尝试此方法:http://www.rocketideas.com/2012/05/gmail-error-password-not-accepted-from-server-solved/


选项1对我有用,谢谢。在我的情况下,这是一个使用“配置SMTP”发送联系邮件的WordPress网站。当通过浏览器登录时,Google会标记出“可疑活动”,并给我提供了将IP地址/网站加入白名单的机会。感谢您的发布! :) - crdunst

5

建立一个ssh隧道到目标服务器,这样你就可以从家里的电脑上使用服务器的IP登录gmail网页客户端。你可能需要隧道转发80和443端口,也许只需要443端口。通过网页客户端登录后,根据SMTPAuthenticationError中列出的知识库文章,问题应该会消失。

以下是如何设置隧道的示例: http://www.noah.org/wiki/SSH_tunnel#simple_port_forwarding_.28SSH_tunneling.29


7
使用隧道连接到另一个网络的更简单方法是使用动态隧道(ssh -D 6789 remotehost),然后在Firefox中将localhost:6789设置为SOCKS5代理。这样你就可以通过浏览器基本上进入远程网络,而本地主机则是远程主机。 - Danilo Bargen
我成功地使用 @DaniloBargen 的方法建立了隧道(谢谢!)。我实际上可以使用浏览器登录到电子邮件帐户,但问题仍然存在。真正奇怪的是,我尝试了上面链接中的一个建议,访问 https://www.google.com/a/yourdomain.com/UnlockCaptcha (当然要更改域名)。但是用户名/密码组合都不起作用。我已经给 Google Apps 支持发送了一封电子邮件询问此事。 - Juan Enrique Muñoz Zolotoochin
我之前将这个答案标记为已接受,因为虽然我不确定自己是如何解决问题的,但这个答案确实非常有帮助且必要。但它现在被取消了,所以我猜可能有其他人知道更好的方法。也许我应该将我自己解释情况的回复标记为已接受? - Juan Enrique Muñoz Zolotoochin
步骤如下:使用@DaniloBargen的方法设置代理,清除浏览器缓存或打开另一个浏览器,在Gmail中登录。 - Cesar Canassa

4

Etusm提供了两个位置来打开不安全的应用程序:

第一个位置: https://myaccount.google.com/security?pli=1#connectedapps (页面底部)

第二个位置: https://www.google.com/settings/security/lesssecureapps

这两个位置都已经打开,但我的无头服务器仍然无法向我发送电子邮件。基于JohnPang的Google+推荐,我找到了第三个位置,在此位置上,我必须允许访问不安全的应用程序:

在myaccount.google.com中,在“登录和安全性”下选择“连接的应用和网站”。这里还有一个“允许不安全的应用程序”的选项。在打开这个选项后,我的服务器现在可以向我发送自动化电子邮件。


谢谢。我错过了第三个,但会相应地进行更新。-完成 - etusm

2

1

以上所有内容对我的情况没有帮助(很奇怪)。但是这个链接可能会对你有所帮助:

https://security.google.com/settings/security/activity

你可以通过Google Plus访问它。

  1. 打开Google+
  2. 从顶部选择“安全”
  3. 在“最近活动”下点击“查看所有事件”
  4. 您将看到一个“异常活动”的列表
  5. 它显示了“应用程序/设备登录尝试(已预防)新加坡”,因为我正在使用来自新加坡的AWS
  6. 单击“更改”>“是的,那是我!”
  7. 再次重试。完成!

1

您的应用账户是否启用了两步验证?那么您可能需要为该应用程序使用特定于应用程序的密码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接