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

Django项目无法发送注册确认邮件问题求助

Django邮箱确认邮件无法发送的排查与解决

一、代码层面的核心错误:收件人邮箱为空

你的views.py中存在致命问题:注册流程里用户还未登录,request.user是匿名用户,request.user.email的值为空,导致邮件没有正确的收件人地址,自然无法发送。

替换为刚创建的用户邮箱:

# 替换原有的to_email行
to_email = user.email  # 或者用form.cleaned_data['email'],确保取到用户提交的邮箱

同时,发件人邮箱from_email要与settings.py中配置的EMAIL_HOST_USER保持一致,避免被邮件服务商拦截:

from django.conf import settings

# 修改from_email
from_email = settings.EMAIL_HOST_USER

二、Gmail SMTP授权配置问题

Gmail目前不允许直接使用账号密码通过SMTP服务发送邮件,必须做以下配置:

  1. 开启Google账号的两步验证
  2. 生成应用专用密码(App Password),将其替换settings.py中的EMAIL_HOST_PASSWORD
  3. 若未开启两步验证,需开启不太安全的应用访问(此选项已逐步停用,优先推荐应用专用密码)

修正后的settings.py配置示例:

DEBUG = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'your-gmail-address@gmail.com'
EMAIL_HOST_PASSWORD = 'your-app-specific-password'  # 这里填应用专用密码,不是普通密码
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

三、调试与错误排查

1. 控制台验证邮件内容

临时切换到控制台邮件后端,验证邮件的收件人、主题、内容是否正确:

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

此时邮件不会实际发送,而是将内容打印到终端,你可以确认所有参数是否正确。

2. 捕获发送异常

添加异常捕获,查看具体错误信息:

try:
    email = EmailMessage(subject, message, from_email, [to_email])
    send_status = email.send()
    print(f"邮件发送状态: {send_status}")  # 1表示成功,0表示失败
except Exception as e:
    print(f"邮件发送失败原因: {str(e)}")
    messages.error(request, "邮件发送失败,请稍后重试")

四、其他排查点

  • 检查收件人的垃圾邮件文件夹:邮件可能被判定为垃圾邮件
  • 确认服务器网络可访问smtp.gmail.com:587,无防火墙或代理拦截
  • 验证用户模型中email字段已正确保存,不为空值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:37:26