Django应用Email后端异常:Gmail发送用户激活邮件失败求助
Django配置Gmail发激活邮件失败(535认证错误)解决方案
问题原因
Gmail早在2022年就取消了“不太安全的应用”访问权限,现在直接用账号密码登录第三方应用(比如Django的SMTP客户端)会触发535认证失败错误,这是Google的安全政策变更导致的,和Django本身无关。
解决方法
方法一:用应用专用密码(简单易操作,推荐)
- 前置条件:你的Google账号必须开启两步验证
- 操作步骤:
- 登录Google账号,进入安全设置页面
- 找到「应用专用密码」选项(只有开了两步验证才会显示)
- 生成一个针对Django的专用密码(可以命名为"Django邮件")
- 修改Django项目的
settings.py配置:EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.gmail.com' EMAIL_PORT = 587 EMAIL_USE_TLS = True EMAIL_HOST_USER = '你的Gmail邮箱地址' EMAIL_HOST_PASSWORD = '刚生成的应用专用密码' # 注意不是你的账号登录密码
方法二:启用OAuth2认证(生产环境更安全)
如果没法开两步验证,或者想要更安全的认证方式,可以用OAuth2:
- 操作步骤:
- 登录Google Cloud控制台,新建一个项目
- 搜索并启用「Gmail API」
- 创建OAuth 2.0客户端ID,选择「桌面应用」类型
- 下载客户端配置的JSON文件
- 安装
django-oauth2-mail这类第三方库,替换Django默认的SMTP邮件后端 - 按照库的文档完成授权流程,获取并配置刷新令牌
额外排查点
- 绝对不能直接填Gmail账号的原始登录密码,必须用应用专用密码或OAuth令牌
- 检查
EMAIL_USE_TLS是否设为True,端口对应587;如果用SSL的话,设EMAIL_USE_SSL=True,端口465 - 登录网页版Gmail,确认账号没有被锁定,也没有未处理的异常登录提醒
内容的提问来源于stack exchange,提问作者prynet
相关产品推荐
相关产品推荐

