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

Django3.0用户注册激活邮件无法发送问题求助

修复Django注册邮件无法发送的问题

看起来你遇到了Django注册时提示邮件已发送,但用户实际收不到的问题,结合你的代码和Gmail的SMTP特性,我整理了几个关键的修复步骤:

1. 解决Gmail SMTP认证的核心问题

谷歌现在对第三方应用的SMTP登录限制很严格,普通密码基本无法直接用于发送邮件,这是最常见的原因:

  • 如果你开启了两步验证:登录谷歌账号的【安全】页面,找到「应用专用密码」,生成一个16位的密码,替换settings.py里的EMAIL_HOST_PASSWORD。
  • 确保EMAIL_HOST_USER是完整的Gmail地址(比如yourname@gmail.com,不是只写mymail)。
  • 若未开启两步验证:需要开启「不太安全的应用访问」(注意:这个选项现在部分谷歌账号已经移除,优先推荐两步验证+应用密码方案)。

2. 完善EmailMessage参数,开启错误提示

你的代码里创建EmailMessage时缺少了from_email参数,而且默认静默失败,即使发送出错也不会有提示。修改如下:

# 先导入settings
from django.conf import settings

# 替换原来的EmailMessage创建代码
email = EmailMessage(
    message_subject,
    message,
    from_email=settings.EMAIL_HOST_USER,  # 显式指定发送方邮箱
    to=[user_email]
)
# 开启fail_silently=False,发送失败时抛出异常,方便排查
sent_count = email.send(fail_silently=False)
# 打印发送状态,确认是否成功
print(f"成功发送 {sent_count} 封邮件")

如果发送失败,控制台会输出具体的SMTP错误信息(比如认证失败、端口不通等),这能帮你快速定位问题。

3. 检查模板路径是否正确

你使用的模板路径是"Backend/accounts/activation_message.html",要确保这个路径和你的项目结构匹配:

  • 如果你的app名为accounts,模板应该放在accounts/templates/accounts/activation_message.html(Django默认会搜索每个app下的templates目录)。
  • 可以先跳过模板渲染,直接发送纯文本邮件测试:
    message = f"Hi {user.username}, 点击链接激活账号:http://{domain_url.domain}/activate/{uid}/{token}"
    
    如果纯文本邮件能收到,说明是模板路径或渲染的问题。

4. 其他排查点

  • 确认用户输入的邮箱地址正确:在user_email = form.cleaned_data["email"]后打印这个值,确保是有效的邮箱。
  • 检查垃圾邮件箱:很多时候测试邮件会被邮箱服务商归类到垃圾邮件里。
  • 测试本地网络:确保你的开发环境能访问smtp.gmail.com的587端口(可以用telnet命令测试:telnet smtp.gmail.com 587)。

按照这些步骤排查,应该能解决邮件无法收到的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:38:00