登录凭据不适用于 Gmail SMTP

Posted

技术标签:

【中文标题】登录凭据不适用于 Gmail SMTP【英文标题】:Login credentials not working with Gmail SMTP 【发布时间】:2013-05-06 22:17:07 【问题描述】:

我正在尝试通过 Gmail 用 Python 发送电子邮件。这是我的代码:

import smtplib


fromaddr = '......................'  
toaddrs  = '......................'  
msg = 'Spam email Test'  

username = '.......'  
password = '.......'

server = smtplib.SMTP('smtp.gmail.com', 587)  
server.ehlo()
server.starttls()
server.login(username, password)  
server.sendmail(fromaddr, toaddrs, msg)  
server.quit()

我得到错误:

Traceback (most recent call last):
  File "email_send.py", line 18, in <module>
    server.login(username, password)
  File "C:\.....\Python\lib\smtplib.py", line 633
, in login
    raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepte
d. Learn more at\n5.7.8 http://support.google.com/mail/bin/answer.py?answer=1425
7\n5.7.8 BADCREDENTIALS s10sm9426107qam.7 - gsmtp')

这似乎是登录的问题。我确信我的登录详细信息是正确的,除了一件事。用户名应该是“blah@gmail.com”还是简单的“blah”?我都试过了,同样的错误。

知道有什么问题吗?

注意:所有句点都不是密码/电子邮件/文件路径/等。

【问题讨论】:

On support.google.com/mail/answer/14257 可能的问题可能是验证码或其他需要用户交互的验证过程。你试过正常登录吗? 没错,Gmail 通过代码发送邮件非常不稳定,我在通过 gmail 帐户从 python 代码发送电子邮件时遇到了很多问题,另一方面,Yahoo 帐户工作得很好。 ***.com/questions/16203071/… 您的代码适用于我的 username@gmail.com。如果我发送错误的用户名或密码,我会收到同样的错误。 @Txema:是的,我的密码不正确。无论如何,谢谢! 【参考方案1】:

我遇到了类似的问题,偶然发现了这个问题。我收到 SMTP 身份验证错误,但我的用户名/密码正确。这是修复它的方法。我读到了:

https://support.google.com/accounts/answer/6010255

简而言之,谷歌不允许你通过 smtplib 登录,因为它已将这种登录标记为“不太安全”,所以你要做的就是在你登录到你的google 帐户,并允许访问:

https://www.google.com/settings/security/lesssecureapps

一旦设置好(见下面我的截图),它应该可以工作了。

现在可以登录了:

smtpserver = smtplib.SMTP("smtp.gmail.com", 587)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo()
smtpserver.login('me@gmail.com', 'me_pass')

更改后的响应:

(235, '2.7.0 Accepted')

事先回复:

smtplib.SMTPAuthenticationError: (535, '5.7.8 Username and Password not accepted. Learn more at\n5.7.8 http://support.google.com/mail/bin/answer.py?answer=14257 g66sm2224117qgf.37 - gsmtp')

还是不行?如果你仍然收到 SMTPAuthenticationError 但现在代码是 534,那是因为位置未知。请点击此链接:

https://accounts.google.com/DisplayUnlockCaptcha

点击继续,这应该会给您 10 分钟的时间来注册您的新应用。所以现在继续进行另一次登录尝试,它应该可以工作。

这似乎无法立即工作,您可能会在 smptlib 中遇到此错误一段时间:

235 == 'Authentication successful'
503 == 'Error: already authenticated'

消息说使用浏览器登录:

SMTPAuthenticationError: (534, '5.7.9 Please log in with your web browser and then try again. Learn more at\n5.7.9 https://support.google.com/mail/bin/answer.py?answer=78754 qo11sm4014232igb.17 - gsmtp')

启用“lesssecureapps”后,去喝杯咖啡,回来,然后再次尝试“DisplayUnlockCaptcha”链接。根据用户体验,更改可能需要一个小时才能生效。然后再次尝试登录过程。

UPDATE:: 在这里查看我的答案: How to send an email with Gmail as provider using Python?

【讨论】:

我已经为不太安全的设备启用了它,但是登录似乎对我不起作用。是否还有其他需要更改的地方 @proprius,在这里查看我的答案***.com/questions/10147455/… 其他电子邮件服务也是如此。我对雅虎也有同样的问题。因此,请务必启用此选项,您的脚本、机器人等将无法正常工作。 这也是因为当你在打开ENABLED之后不使用你的gmail时,谷歌会自动将其关闭。 允许“lesssecureapps”启用使用 smtp。拨动开关后工作。点赞!【参考方案2】:

我有同样的问题。身份验证错误可能是由于您的安全设置,例如两步验证。它不会允许第三方应用程序覆盖身份验证。

登录您的 Google 帐户,然后使用以下链接:

第一步【禁用两步验证的链接】:

https://myaccount.google.com/security?utm_source=OGB&utm_medium=act#signin

第 2 步:[允许安全性较低的应用的链接]

https://myaccount.google.com/u/1/lesssecureapps?pli=1&pageId=none

现在应该都好了。

【讨论】:

这也有效!我们只需要做Step 2,因为如果我们不经常使用谷歌帐户,谷歌会自动将less secure apps 带到off【参考方案3】:

如果您使用的是 smtp.gmail.com,那么您必须执行以下操作:

    打开不太安全的应用

    你会在你的 gmail 收件箱中收到安全邮件,点击里面的“是,是我”。

    现在再次运行您的代码。

【讨论】:

【参考方案4】:

我有同样的问题。我通过在 Mac 上为电子邮件应用程序创建应用程序密码来修复它。 您可以在我的帐户 -> 安全 -> 登录 Google -> 应用密码中找到它。 下面是它的链接。 https://myaccount.google.com/apppasswords?utm_source=google-account&utm_medium=web

【讨论】:

注意:如果您启用了 MFA,您必须启用应用密码。我必须转到我的管理员帐户:admin.google.com -&gt; security -&gt; less secure enable. 然后我必须转到我的个人帐户:security -&gt; App Passwords。然后我可以运行 TLS 连接并发送电子邮件。【参考方案5】:

如果您收到此错误(535,b'5.7.8 用户名和密码不被接受。了解更多信息,请访问\n5.7.8 https://support.google.com/mail/?p=BadCredentials o60sm2132303pje.21 - gsmtp')

然后只需进入安全部分的谷歌帐户设置并创建一个不太安全的帐户并打开不太安全的按钮

【讨论】:

应用访问安全性较低一些应用和设备使用安全性较低的登录技术,这会使您的帐户容易受到攻击。您可以关闭我们推荐的这些应用程序的访问权限,或者如果您想在有风险的情况下使用它们,请打开它。如果不使用,Google 会自动关闭此设置。了解详情 允许安全性较低的应用:开启【参考方案6】:

如果您开启两步验证,您需要生成一个特殊的应用密码,而不是使用您的通用密码。 https://myaccount.google.com/security#signin

【讨论】:

由于安全原因,这通常比禁用不太安全的应用程序要好,但它们很复杂,所以你不记得它们,这意味着你必须喜欢在评论中写下它并删除在发布最终产品之前,或者将其存储在数据库中【参考方案7】:

我遇到了同样的问题,我通过允许“不太安全的应用程序访问”解决了这个问题。这可以在 Google 帐户的安全标签中找到:

【讨论】:

@Jamjitul 它确实回答了你可能已经注意到的问题【参考方案8】:

就我而言,我允许访问,但问题是我使用的是server.login('Name &lt;email&gt;', password)。请务必在此处仅使用您的电子邮件:server.login('youremail@gmail.com', password)

更改后的响应:

(235, '2.7.0 Accepted')

事先回复:

smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8  https://support.google.com/mail/?p=BadCredentials 130sm13119106qkh.99 - gsmtp')

【讨论】:

【参考方案9】:

尝试打开不太安全的应用程序并确保您有 smtp.gmail.com 或用于其他搜索

【讨论】:

以上是关于登录凭据不适用于 Gmail SMTP的主要内容,如果未能解决你的问题,请参考以下文章

Google OAuth 登录错误:凭据无效

尽管凭据正确,Django Gmail 身份验证失败

redshift 不适用于本地 aws 配置文件凭据吗?

在 URL 中嵌入凭据不适用于 selenium 和 chrome

带Gmail的Log4Net SMTP Appender

GMail REST API:使用没有模拟的 Google 凭据