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

Django密码重置邮件无法接收求助(send_mail功能正常)

解决Django auth密码重置邮件无法收到的思路

我之前也碰到过一模一样的情况:send_mail()能正常发邮件,但用内置的密码重置视图提交请求后,页面跳转正常却收不到Gmail的重置邮件。给你几个实用的排查方向:

  • 显式指定重置视图的发件人
    Django的PasswordResetView默认会使用SERVER_EMAIL作为发件邮箱,而非你配置的DEFAULT_FROM_EMAIL。可以直接在视图里指定发件人参数:

    path('password-reset/', auth_views.PasswordResetView.as_view(
        template_name='users/password_reset.html',
        from_email=settings.DEFAULT_FROM_EMAIL  # 新增这一行
    ), name='password_reset'),
    

    或者在settings.py里把SERVER_EMAIL和DEFAULT_FROM_EMAIL设为同一个值:

    SERVER_EMAIL = DEFAULT_FROM_EMAIL
    
  • 用控制台后端确认邮件是否生成
    临时替换邮件后端为控制台输出,验证Django是否真的生成了重置邮件:

    # settings.py 临时修改
    EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
    

    提交重置请求后,查看控制台输出的邮件内容,重点确认收件邮箱是否正确、邮件结构是否正常。如果控制台能看到邮件,说明问题出在SMTP发送或邮箱过滤环节;如果看不到,那可能是视图配置有遗漏。

  • 排查Gmail的过滤与安全设置

    1. 先检查Gmail的垃圾邮件文件夹和已拦截邮件列表,很多时候重置邮件会被误判为垃圾邮件;
    2. 如果你用的是Google账号的应用密码,务必确认账号已开启两步验证,且应用密码是正确生成的(应用密码是一次性的,生成后要妥善保存);
    3. 换一个非Gmail邮箱(比如Outlook)测试,排查是不是Gmail的特定限制导致的。
  • 自定义简化版重置邮件模板
    默认的密码重置邮件模板可能包含被邮箱服务商判定为风险的内容。可以自定义极简模板测试:

    path('password-reset/', auth_views.PasswordResetView.as_view(
        template_name='users/password_reset.html',
        email_template_name='users/password_reset_email.html'  # 指定自定义模板
    ), name='password_reset'),
    

    然后在users/password_reset_email.html里写最基础的内容:

    点击下方链接重置密码:
    {{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}
    
  • 开启Django邮件日志排查错误
    在settings.py里添加日志配置,查看邮件发送的详细过程和可能的错误:

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

    运行重置流程后,控制台会输出SMTP连接、认证、发送的详细日志,比如有没有认证失败、收件人被拒绝等具体错误。

  • 确认环境变量是否正确加载
    有时候环境变量读取失败,导致EMAIL_HOST_USER或EMAIL_HOST_PASSWORD为空。可以在视图里临时打印这些值验证:

    # 在PasswordResetView中添加(或用Django Shell测试)
    from django.conf import settings
    print(settings.EMAIL_HOST_USER)
    print(settings.EMAIL_HOST_PASSWORD)
    

    确保输出的是正确的Gmail账号和应用密码/密码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:21:48