使用Django send_mail无法收到邮件,请问问题出在哪里?
Django send_mail 无法收到邮件的排查要点
1. 关闭 fail_silently 查看错误详情
你的代码设置了 fail_silently = True,这会让Django隐藏所有邮件发送过程中的错误信息,导致你无法定位问题根源。先将其修改为 False:
send_mail(subject, message, from_email, to_list, fail_silently=False)
运行后查看控制台或日志的报错内容,这是最快找到问题的方式。
2. 检查Gmail SMTP配置有效性
你使用Gmail的SMTP服务,需确保以下配置符合要求:
- 必须开启两步验证:Gmail仅对开启两步验证的账号提供应用专用密码,你配置的
EMAIL_HOST_PASSWORD应该是生成的应用专用密码,而非原账号密码。 - 应用专用密码是否正确:未开启两步验证的账号,Gmail会拦截“非安全应用”的访问,目前该选项已逐步淘汰,必须使用应用专用密码。
- 端口与加密方式匹配:
EMAIL_PORT=587搭配EMAIL_USE_TLS=True是正确组合,但要确认服务器能正常访问该端口(无防火墙拦截)。
3. 检查收件邮箱的垃圾邮件/垃圾箱
邮件很可能未丢失,只是被邮箱服务商判定为垃圾邮件。先去收件人的垃圾邮件箱、垃圾箱中查找。
4. 验证邮件发送参数与内容
- 确认
Pmail是否正确获取:在发送前添加print(Pmail),检查是否为空或邮箱格式错误。 - 简化邮件内容测试:避免使用“Congratulations”这类易被反垃圾系统标记的词汇,先用极简内容(如“测试邮件”)验证发送功能。
5. 确认Django配置是否生效
确保邮件配置代码放在settings.py中,且未被其他代码覆盖。可在视图函数中添加print(settings.EMAIL_HOST_USER),检查输出是否与你配置的邮箱一致。
内容的提问来源于stack exchange,提问作者Shahriar Hussain
相关产品推荐
相关产品推荐

