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

Posted

技术标签:

【中文标题】尽管凭据正确,Django Gmail 身份验证失败【英文标题】:Django Gmail auth fails despite correct credentials 【发布时间】:2022-01-10 16:53:13 【问题描述】:

我通过 gmail 从 django 发送邮件突然停止工作。它已经运行了一年多,所以我认为我的基本设置应该仍然没问题。有问题的 Google 帐户启用了 2FA,并且在下面的配置中使用的密码是生成的 app-password,而不是主帐户密码。我已经通过浏览器登录了 Gmail,并检查了它没有被锁定并且没有超过配额。

settings.py

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_USE_TLS = True
EMAIL_PORT = 587 
EMAIL_HOST_USER = '<MY-MAIL-ADDRESS>'
EMAIL_HOST_PASSWORD = '<PASSWORD>'
DEFAULT_FROM_EMAIL = '<MY-MAIL-ADDRESS>'

我已经使用以下命令验证了我的凭据:(ofc shell 扩展不起作用,我只是将命令的输出粘贴到该位置)

$ openssl s_client -connect smtp.gmail.com:587 -starttls smtp
>AUTH PLAIN $(echo -ne '\0MY-MAIL-ADDRESS\0PASSWORD' | base64)
>235 2.7.0 Accepted

但是,如果我尝试使用 send_mail 它会弹跳:

In [1]: from django.core.mail import send_mail                                                                                                                           
                                                                                                                                                                         
In [2]: send_mail('Subject', 'This is a test message', 'MY-MAIL-ADDRESS', ('recipient@address.com',))  
 (Output shortened)
SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8  https://support.google.com/mail/?p=BadCredentials r17sm9826202wmq.5 - gsmtp')

关于什么可能(突然)出错的任何提示?

【问题讨论】:

检查这个答案。 enter link description here 干杯:) 我想你可以在这里找到解决这个问题的方法。 enter link description here @VikramChoudhary 这不适用于我的情况。 “不太安全的应用程序”设置仅适用于未启用 2fa 的帐户。如果您有 2fa,则需要使用特定于应用程序的密码(我正在使用,如上所述)。 【参考方案1】:

事实证明,我们已被 Google 列入黑名单。

我使用guide 将我的网络服务器添加到 IP 白名单。之后,邮件又开始工作了。

有趣的是,即使是 Google 的支持者(对于付费的 Google Workspace 帐户,而不是免费的 gmail)也无法告诉我这一点,我不得不自己尝试

【讨论】:

以上是关于尽管凭据正确,Django Gmail 身份验证失败的主要内容,如果未能解决你的问题,请参考以下文章

DRF 总是返回“未提供身份验证凭据”

无效的凭据引发身份验证突变异常

Django Rest Framework JWT 未提供身份验证凭据

Django Rest Framework JWT“未提供身份验证凭据。”

Django Rest Framework 的凭据不正确?

未提供 Angular + Django REST 身份验证凭据