You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 07:55:30