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

Django密码重置异常:未调用password_reset_confirm模板且未发送重置邮件问题排查

排查Django密码重置邮件未发送问题

我刚碰到过类似的Gmail SMTP配置坑,结合你的代码和场景,咱们一步步来排查:


1. 优先检查Google账号的安全验证设置

这是Gmail SMTP最常见的问题:

  • 如果你的Google账号开启了两步验证(2FA),绝对不能用普通登录密码作为EMAIL_HOST_PASSWORD,必须生成应用专用密码(App Password):
    登录Google账号 → 进入「安全」设置 → 找到「应用专用密码」(需要先开启2FA才能看到)→ 创建一个专为Django使用的密码,把这个密码填入config.PASS。
  • 如果没开2FA,现在Google已经逐步取消了「不太安全的应用访问」选项,还是建议开启2FA后用App Password,这是最可靠的方式。

2. 验证环境变量是否正确加载

你用了config.EMAIL和config.PASS读取配置,先确认这些变量真的拿到了正确的值:
打开Django shell(运行python manage.py shell),执行:

from django.conf import settings
print(settings.EMAIL_HOST_USER)
print(settings.EMAIL_HOST_PASSWORD)

如果输出的不是你的邮箱和正确的App Password,说明环境变量加载有问题,检查你的配置文件(比如.env)有没有拼写错误,或者config模块有没有正确读取变量。

3. 直接测试邮件发送功能

在Django shell里手动发送测试邮件,能快速定位错误:

from django.core.mail import send_mail
send_mail(
    "Django 测试邮件",
    "这是一封测试邮件,用来验证SMTP配置是否正常",
    settings.EMAIL_HOST_USER,
    ["你的目标测试邮箱@xxx.com"],
    fail_silently=False,
)

如果执行时报错,比如SMTPAuthenticationError,说明认证失败(大概率是密码/App Password不对);如果是连接超时,检查你的网络是否能访问smtp.gmail.com,或者有没有被防火墙拦截。

4. 查看Django日志细节

如果测试邮件没报错但还是收不到,添加日志配置看看邮件发送的具体过程:
在settings.py里加入:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {'class': 'logging.StreamHandler'},
    },
    'loggers': {
        'django.core.mail': {
            'handlers': ['console'],
            'level': 'DEBUG',
        },
    },
}

然后重启服务器,触发密码重置,看控制台输出的日志,能看到邮件是否真的被发送,有没有被服务商拒绝。

5. 检查垃圾邮件文件夹

有时候邮件会被邮箱服务商判定为垃圾邮件,先去收件邮箱的「垃圾邮件」「促销邮件」文件夹里找找,别漏了这一步。


另外,你的URL配置看起来没问题,既然能正常跳转到password-reset/done/,说明路由和视图逻辑是正常的,问题大概率出在邮件配置环节。

内容的提问来源于stack exchange,提问作者user14827309

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 08:08:17