smtplib.SMTPAuthenticationError:(534,b'5.7.9 需要应用程序特定密码

问题描述 投票:0回答:4

smtplib.SMTPAuthenticationError: (534, b'5.7.9 需要应用程序特定密码。了解更多信息 5.7.9 https://support.google.com/mail/?p=InvalidSecondFactor h22sm15927247pfv.25 - gsmtp')

环境变量已设置但不起作用(即使它是精确值)。

  • 我已经在谷歌帐户中设置了应用程序密码,验证码已禁用
  • 我已经在 .bashrc 文件中设置了环境变量
    export EMAIL_USER='[email protected]'
  • 比较
    os.environ.get('EMAIL_USER')
    和邮件值字符串是否为 True

我正在尝试将其导入配置文件中,当我使用编码值时,它工作正常,但是使用我使用

os.environ.get('EMAIL_USER')
,它会停止工作并抛出此错误。

python gmail smtplib
4个回答
16
投票

应用密码是一个 16 位数字的密码,允许安全性较低的应用或设备访问您的 Google 帐户。应用程序密码只能与启用了两步验证的帐户一起使用。

https://support.google.com/accounts/answer/185833?hl=en

使用应用密码,例如 EMAIL_USER="example.com" EMAIL_PASSWORD="twtsxiraaxpcuhuyp"。如果您没有 Gmail 应用程序密码,请使用生成密码创建一个新应用程序。检查您的应用程序和密码 https://myaccount.google.com/apppasswords。 祝你好运。


4
投票

在谷歌帐户中创建应用程序密码。将创建的密码传递到环境变量中并且它起作用了。只需将常规密码替换为应用程序 16 位应用程序密码即可。


0
投票

幸好后来找到了答案,需要重启Linux或者重新加载bashrc文件。 除非发生这种情况,环境将不会注册它。 即使在重新启动后,使用 python 控制台设置环境变量也不起作用。


0
投票

感谢@Muhammadalive 的回答和另一个问题,我成功了。我将复制下面的代码,因为有些人对社区机器人请求投了赞成票,以获得更明确的答案。

我目前正在开发中。如果部署后我认为有必要更新答案,我会回来编辑它。

我使用 python-de Couple 来避免在我的 settings.py 中写入密码和电子邮件。

# settings.py
from decouple import config

#
# ... More code
#

EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = "smtp.gmail.com"
EMAIL_POST = 587
EMAIL_USE_TLS = True
# EMAIL_HOST_USER is the email: '[email protected]'
EMAIL_HOST_USER = config("EMAIL_HOST_USER")
# EMAIL_HOST_PASSWORD is the 16 digit 'app password': 'twexamplexpcuhuy'
EMAIL_HOST_PASSWORD = config("EMAIL_HOST_PASSWORD")

我有密码和电子邮件的文件名为“.env”,它看起来像这样:

# .env

#
# ... More code
#
EMAIL_HOST_USER = [email protected]
EMAIL_HOST_PASSWORD = twexamplexpcuhuy
一步一步:
  1. 在您的 Google 帐户中启用两步验证
  2. 在您的Google帐户中为您的django应用程序创建一个应用程序密码。这将是一个 16 位数字的密码,与您的 google 帐户密码不同。谷歌将它分成四份给你,比如“twex ampl expc uhuy”,但你会一起使用它,比如“twexamplexpcuhuy”。
  3. 使用您的 Gmail 帐户和应用程序密码,按照上面的代码更新您的 settings.py(不要使用您的普通 Gmail 密码 - 遵循@Murad Farajov 答案)。
© www.soinside.com 2019 - 2024. All rights reserved.