【问题标题】:SMTPAuthenticationError when sending mail using gmail and python [duplicate]使用gmail和python发送邮件时出现SMTPAuthenticationError [重复]
【发布时间】:2015-01-07 05:57:41
【问题描述】:

当我尝试使用 gmail 和 python 发送邮件时发生错误,此类问题已经在此站点中,但对我没有帮助

gmail_user = "me@gmail.com"
gmail_pwd = "password"
TO = 'friend@gmail.com'
SUBJECT = "Testing sending using gmail"
TEXT = "Testing sending mail using gmail servers"
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.login(gmail_user, gmail_pwd)
BODY = '\r\n'.join(['To: %s' % TO,
        'From: %s' % gmail_user,
        'Subject: %s' % SUBJECT,
        '', TEXT])

server.sendmail(gmail_user, [TO], BODY)
print ('email sent')

错误:

    server.login(gmail_user, gmail_pwd)
    File "/usr/lib/python3.4/smtplib.py", line 639, in login
   raise SMTPAuthenticationError(code, resp)
   smtplib.SMTPAuthenticationError: (534, b'5.7.14   
   <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbtl1\n5.7.14       Li2yir27TqbRfvc02CzPqZoCqope_OQbulDzFqL-msIfsxObCTQ7TpWnbxIoAaQoPuL9ge\n5.7.14 BUgbiOqhTEPqJfb02d_L6rrdduHSxv26s_Ztg_JYYavkrqgs85IT1xZYwtbWIRE8OIvQKf\n5.7.14 xxtT7ENlZTS0Xyqnc1u4_MOrBVW8pgyNyeEgKKnKNyxce76JrsdnE1JgSQzr3pr47bL-kC\n5.7.14 XifnWXg> Please log in via your web browser and then try again.\n5.7.14 Learn more at\n5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 fl15sm17237099pdb.92 - gsmtp')    

【问题讨论】:

标签: python smtplib


【解决方案1】:

您的代码看起来正确。尝试通过浏览器登录,如果您能够访问您的帐户,请返回并再次尝试您的代码。 只需确保您输入的用户名和密码正确无误

编辑: Google 会阻止来自不使用现代安全标准的应用程序的登录尝试(在他们的支持中提到 page)。但是,您可以通过以下链接打开/关闭此安全功能:

转到此链接并选择打开
https://www.google.com/settings/security/lesssecureapps

【讨论】:

  • 确保您点击开启,而不是关闭!由于这个简单的错误,我损失了两个小时的时间:)
  • 嗨!我尝试在我的 google 企业帐户中转到此设置,但它说权限在于管理员,即使我是管理员!
  • @AnantGupta Note to Google Apps users: This setting is hidden if your administrator has locked less secure app account access. 您必须先在管理控制台中启用此功能,稍后您将能够允许lesssecureapps
  • 开启这个解决问题。谢谢。但是代码中是否有任何更改以使其更安全以便谷歌可以接受?
  • @aaveg 有没有办法在 Python 控制台中检查它是无效凭据还是需要启用不太安全的应用程序?
【解决方案2】:

您的代码看起来正确,但有时当您尝试从不寻常的位置发送电子邮件时,Google 会阻止 IP。您可以通过IP访问https://accounts.google.com/DisplayUnlockCaptcha并按照提示尝试解封。

参考:https://support.google.com/accounts/answer/6009563

【讨论】:

  • 请描述解决方案的一些要点,因为链接现在有效,但以后可能无法访问
  • 如果它对其他人有帮助,即使在打开不太安全的应用程序和 displayunlockcaptcha 后,我也会收到身份验证错误。经过一段时间的弄清楚,我看到谷歌中不太安全的应用程序设置正在自行关闭!我尝试打开它几次,然后它就起作用了。
  • 开启此功能后,一般一个小时即可反映,但有时需要24小时才能反映。它在他们的控制台中提到。
  • 谢谢,我尝试在我的 vps(我以前从未登录过的 ip)上运行我的脚本,并且此链接适用于我在新 ip 上登录。
  • 即使我打开了lesssecureapps,它仍然报错。非常感谢您的解决方案。
【解决方案3】:

我刚刚通过 Python 发送了一封带有 gmail 的电子邮件。 尝试使用 smtplib.SMTP_SSL 建立连接。另外,您可以尝试更改 gmail 域和端口。

所以,你可能有机会:

server = smtplib.SMTP_SSL('smtp.googlemail.com', 465)
server.login(gmail_user, password)
server.sendmail(gmail_user, TO, BODY)

另外,您可以检查电子邮件内置模块。通过这种方式,您可以提高代码的可读性并轻松处理电子邮件标题。

【讨论】:

  • 这未能解决问题。
  • @SmallChess 这是一个很老的答案。当然,谷歌已经改变了它的 auth 方法,也许 Python 已经做了一些事情来处理它。检查看起来可行的 aaveg 答案。
  • 2020 并且运行良好。作为服务器,您还可以使用 smtp.gmail.com
猜你喜欢
  • 2022-11-03
  • 2022-08-21
  • 1970-01-01
  • 1970-01-01
  • 2016-06-09
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
相关资源
最近更新 更多