Djoser无法发送邮件求助:配置完成但收不到确认邮件
Djoser注册后无法收到Gmail确认邮件的排查与解决
已知情况
- 已开启Gmail账号两步验证并生成应用专用密码
- 项目基于Djoser实现用户注册,注册请求返回
201 Created,但未收到确认/激活邮件 - settings.py相关配置已提供,日志仅显示注册成功的响应
排查与解决步骤
1. 修正Djoser配置的大小写错误
你的settings中Djoser配置项写为Djoser = { ... },但Django仅识别全大写的配置键,正确写法应为DJOSER = { ... }。这个错误会导致Djoser的邮件发送配置完全不生效,是最可能的核心问题。
2. 验证环境变量是否正确加载
确认EMAIL_HOST_USER和EMAIL_HOST_PASSWORD这两个环境变量已被正确读取:
- 在Django shell中执行以下命令验证:
from django.conf import settings print(settings.EMAIL_HOST_USER) print(settings.EMAIL_HOST_PASSWORD) - 如果输出为空或不正确,检查环境变量的加载方式(比如
.env文件是否被正确读取,或者服务器环境变量是否配置到位)。
3. 用Django原生功能测试SMTP配置
先绕过Djoser,直接测试邮件发送是否正常,排除SMTP配置问题:
在Django shell中执行:
from django.core.mail import send_mail send_mail( '测试邮件', '这是一封用于验证SMTP配置的测试邮件', settings.EMAIL_HOST_USER, ['你的测试接收邮箱'], fail_silently=False, )
- 如果执行时报错,根据错误信息针对性处理:
- 认证失败:检查应用专用密码是否正确,确认密码没有包含空格或输入错误
- 连接超时:检查服务器是否允许访问smtp.gmail.com的587端口,是否有防火墙/安全组拦截
- TLS错误:确认
EMAIL_USE_TLS = True配置正确,端口使用587
4. 检查自定义邮件类是否存在问题
你配置了自定义邮件类(accounts.email.ActivationEmail等),需确认:
- 这些类正确继承了Djoser的基类,比如:
from djoser.email import ActivationEmail as BaseActivationEmail class ActivationEmail(BaseActivationEmail): template_name = 'email/activation.html' - 暂时注释掉
DJOSER["EMAIL"]配置,使用Djoser默认邮件类测试,若能正常发送,说明自定义类存在逻辑错误。
5. 检查邮件是否被归类到垃圾邮件
即使邮件发送成功,Gmail可能会将激活邮件归类到垃圾邮件或促销邮件文件夹,先检查这些位置。
6. 确认邮件后台未被覆盖
确保没有在其他配置文件(如local_settings.py)中覆盖EMAIL_BACKEND为django.core.mail.backends.dummy.EmailBackend,这个后台仅模拟发送,不会实际发出邮件。
内容的提问来源于stack exchange,提问作者nahuel arrieta
相关产品推荐
相关产品推荐

