Django无法发送邮件求助:注册流程中验证邮件发送失败
Django注册验证邮件发送失败排查方案
一、核对SMTP配置细节
- 确认Gmail SMTP协议与端口匹配:
- SSL协议:
EMAIL_USE_SSL = True,EMAIL_PORT = 465 - TLS协议:
EMAIL_USE_TLS = True,EMAIL_PORT = 587
- SSL协议:
- 检查
EMAIL_HOST是否为'smtp.gmail.com',避免拼写错误 - 若曾开启两步验证,必须使用应用专用密码替代原密码;关闭两步验证后需确保使用的是当前有效登录密码
二、测试基础邮件发送能力
直接在Django Shell中测试最简邮件发送逻辑,排除业务代码干扰:
from django.core.mail import send_mail send_mail( '测试邮件主题', '测试邮件内容', '你的Gmail账户@gmail.com', ['收件人邮箱@example.com'], fail_silently=False, )
运行后查看终端报错信息,这是定位问题最直接的方式
三、检查user.email_user()调用逻辑
- 确认
user对象的email字段已正确赋值,无空值或拼写错误 - 验证邮件内容是否存在格式问题(比如未闭合的HTML标签),导致邮件被服务商拦截
- 若调用
email_user()时未指定from_email,需检查DEFAULT_FROM_EMAIL配置是否有效,确保发件人地址符合Gmail要求
四、排查邮件投递拦截问题
- 检查收件邮箱的垃圾邮件/垃圾箱,验证邮件常被误判为垃圾邮件
- 查看Gmail账户的「已发送」列表,确认邮件是否从发件端发出(若发件端有记录但收件端无,大概率是被收件服务商拦截)
- 检查服务器IP是否被列入邮件黑名单,公共服务器IP易出现此类问题
五、验证Token生成逻辑的间接影响
Token生成异常可能导致邮件发送代码未执行,需在视图中添加异常捕获:
try: # Token生成与邮件发送代码 token = UserVerificationTokenGenerator().make_token(user) user.email_user(邮件主题, 邮件内容) except Exception as e: print(f"邮件发送错误: {e}")
查看是否有异常抛出导致流程中断
内容的提问来源于stack exchange,提问作者petrukv
相关产品推荐
相关产品推荐

