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

Django用户注册确认邮件无法发送问题排查求助

Django注册确认邮件发送失败排查方案

我在开发服务时设置了用户注册后发送确认邮件的功能,用户可正常完成注册,但确认邮件始终无法发送。以下是相关代码:

views.py

def signup_view(request):
    if request.method == "POST":

        first_name= request.POST.get('first_name')
        last_name = request.POST.get('last_name')
        email = request.POST.get('email', 'default user')
        phone = request.POST.get('phone')
        password1= request.POST.get('password1')
        password2= request.POST.get('password2')
        userHash= email.replace('@','')
       # userHash =~ s/'@'//g

        #new =User.objects.filter(username = userHash)

        if password1 != password2:
            return render(request, 'signup.html',{'error_message': ' Passwords Different'})
        else:
            user = User.objects.create_user((userHash, password1))
            user.save()
            login(request, user)
            current_site = get_current_site(request)
            user = request.user
            email = request.user.email
            subject = "Verify Email"
            message = render_to_string('account/verify_email_message.html', {
                'user': user,
                'domain': current_site.domain,
                'uid':urlsafe_base64_encode(force_bytes(user.pk)),
                'token':account_activation_token.make_token(user),
            })
            email = EmailMessage(
                subject, message, to=[email]
            )
            email.send()
            return HttpResponse("Please Confirm your email address to complete the registration") and  render(request,'account/landing.html')
    else:
        form = CreateUserForm()
        context = {
        'form': form
        }
        return render(request, 'account/signup.html', context)
def activate(request, uidb64, token):
    try:
        uid = force_str(urlsafe_base64_decode(uidb64))
        user = User.objects.get(pk=uid)
    except(TypeError, ValueError, OverflowError, User.DoesNotExist):
        user = None
    if user is not None and account_activation_token.check_token(user, token):
        user.is_active = True
        user.save()
        return HttpResponse("Thank you for this confirmation") and redirect('account/index.html')   
    else:
        messages.warning(request, 'The link is invalid.')
    return render(request, 'account/index.html')


def home(request):
    return render(request, 'account/index.html')

settings.py

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = "smtp.gmail.com"
EMAIL_PORT = 587
EMAIL_USE_TLS = True

EMAIL_HOST_USER = "myjarwiz2024@gmail.com" # - GMAIL email address
EMAIL_HOST_PASSWORD = 'redacted' # - APP password

DEFAULT_FROM_EMAIL = 'Jarwiz myjarwiz2024@gmail.com' # - GMAIL email address

问题排查与修复建议

  • 用户对象邮箱未正确赋值:
    创建用户时,User.objects.create_user((userHash, password1)) 参数格式错误,且未将表单中获取的email、first_name、last_name绑定到用户对象,导致request.user.email为空,邮件无收件人。修改代码:

    user = User.objects.create_user(userHash, password1)
    user.first_name = first_name
    user.last_name = last_name
    user.email = email  # 绑定表单获取的邮箱
    user.save()
    
  • 邮件收件人变量被覆盖:
    代码中先通过email = request.POST.get('email', 'default user')获取了用户邮箱,后续又赋值email = request.user.email,此时用户邮箱尚未存入数据库,导致收件人变为空。直接使用最初获取的email变量即可。

  • Gmail SMTP配置修正:

    • DEFAULT_FROM_EMAIL格式错误,正确写法为 "Jarwiz <myjarwiz2024@gmail.com>",确保发件人格式符合邮件标准。
    • 确认已开启Google账号2步验证,且使用的是应用专用密码(而非普通登录密码)。
    • 可临时切换EMAIL_BACKEND为django.core.mail.backends.console.EmailBackend,在控制台查看邮件是否正常生成,判断是发送环节还是内容/收件人环节的问题。
  • 视图返回逻辑错误:
    return HttpResponse("xxx") and render(...) 不符合Python逻辑,and会返回最后一个真值,实际只会执行render。建议合并提示信息到模板:

    return render(request, 'account/landing.html', {
        'message': 'Please Confirm your email address to complete the registration'
    })
    

    激活视图中的类似错误同样修正:

    messages.success(request, "Thank you for this confirmation")
    return redirect('home')  # 使用URL名称而非模板路径
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:11:11