Django用Gmail SMTP发邮件遇认证错误,无法关闭对应安全选项
Django使用Gmail SMTP发送邮件报错535的解决方法
问题背景
我在Django项目中尝试用Gmail发送邮件,相关配置与代码如下:
settings.py 配置
EMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER') EMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD') EMAIL_PORT = 587 EMAIL_HOST = 'smtp.gmail.com' EMAIL_USE_TLS = True
发送邮件函数
def notify_user(email_address, subject='Subject', message='Some message!') -> None: send_mail( subject, message, settings.EMAIL_HOST_USER, [email_address], fail_silently=False )
我了解需要关闭Gmail的某安全选项,但操作时被Gmail拒绝,最终触发以下错误:
raise SMTPAuthenticationError(code, resp) 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 f14-20020a056512360e00b00492bbf7db8asm320697lfs.85 - gsmtp')
解决方案
目前Gmail已彻底停用个人账号的“允许不够安全的应用”选项,无法再关闭该限制,你可以通过以下两种方式解决:
方式一:使用应用专用密码(推荐)
- 先给你的Gmail账号开启两步验证(必须开启才能生成应用专用密码)
- 进入Google账号安全设置,找到“应用专用密码”选项
- 选择“邮件”作为应用类型,设备可选择“其他”并自定义名称
- 生成后会得到一个16位的密码,将这个密码替换到
EMAIL_HOST_PASSWORD环境变量中即可
方式二:改用Google Workspace账号
如果你的账号是Google Workspace(企业版)账号,仍可在后台开启“允许不够安全的应用”选项,个人账号无此权限。
另外,你当前的Django邮件配置(SMTP地址、端口、TLS设置)是正确的,无需修改。
内容的提问来源于stack exchange,提问作者Python Django
相关产品推荐
相关产品推荐

