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

Django忘记密码邮件发送功能异常求助

Django忘记密码邮件无法发送的问题排查与修复

代码里的直接错误

  • 参数传递错误:
    views.py里调用send_forget_password_mail(user_obj,token)时,传的是整个用户对象,但helpers.py的函数需要接收邮箱字符串。应该改成send_forget_password_mail(user_obj.email, token)。

  • 消息类型误用:
    用户不存在时用了messages.success,逻辑完全反了,换成messages.error(request, '未找到该用户名对应的用户')。

  • 邮件内容拼写错误:
    消息里的"rest your password"是笔误,应该是"reset your password"。

必要的配置检查

确保settings.py里的邮件配置正确,以QQ邮箱为例:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = '你的QQ邮箱@qq.com'
EMAIL_HOST_PASSWORD = '邮箱授权码' # 不是登录密码,是邮箱设置里生成的授权码
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

不同邮箱的SMTP参数不同,比如163邮箱用smtp.163.com、端口465+SSL,需要对应调整。

异常处理优化

原代码捕获异常只打印,建议把错误信息反馈给用户,方便排查:

except Exception as e:
    messages.error(request, f'发送邮件失败:{str(e)}')
    print(e)

修复后的完整代码

views.py

def ForgetPassword(request):
    try:
        if request.method == "POST":
            username = request.POST.get('username')

            if not User.objects.filter(username=username).first():
                messages.error(request, '未找到该用户名对应的用户')
                return redirect('forget-password/')
            
            user_obj = User.objects.get(username=username)
            token = str(uuid.uuid4())
            send_forget_password_mail(user_obj.email, token)
            messages.success(request, '重置密码邮件已发送,请查收')
            return redirect('/forget-password/')
        
    except Exception as e:
        messages.error(request, f'发送邮件失败:{str(e)}')
        print(e)
    return render(request, 'forget-password.html')

helpers.py

from django.core.mail import send_mail
from django.conf import settings

def send_forget_password_mail(email, token):
    subject = "重置密码链接"
    message = f'您好,请点击以下链接重置您的密码:http://127.0.0.1:8000/change-password/{token}/'
    email_from = settings.EMAIL_HOST_USER
    recipient_list = [email]
    send_mail(subject, message, email_from, recipient_list)
    return True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:27:27