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

Django无法发送500错误邮件求助:原有功能失效排查

解决Django 500错误邮件失效的问题

嘿,你遇到的这个情况挺典型的——手动发邮件没问题,但错误触发时收不到,说明邮件通路是通的,问题出在Django错误邮件的触发逻辑或者配置细节上。咱们一步步来排查:

1. 先把EMAIL_USE_TLS打开

看你的配置里这行被注释了,Gmail的587端口是必须要TLS加密的。虽然手动调用send_mail可能因为默认配置凑巧能发,但Django的错误邮件发送逻辑依赖这个明确设置。赶紧把注释去掉:

EMAIL_USE_TLS = True

2. 修正ADMINS的格式

Django对ADMINS的格式有要求,必须是包含元组的列表,每个元组是(昵称, 邮箱)的形式,而不是单纯的邮箱字符串列表。你现在写的ADMINS = ['<my_email>']不符合要求,改成这样:

ADMINS = [('你的名字', '<my_email>')]

(昵称随便填个标识就行,比如你的名字或者Admin)

3. 确认DEBUG已经关闭

划重点!Django只有在DEBUG = False的时候,才会把500错误邮件发给ADMINS。如果你的DEBUG还开着,哪怕触发了错误也不会发邮件。检查settings里的这行:

DEBUG = False

4. 别漏了ALLOWED_HOSTS

当DEBUG关闭后,Django强制要求设置ALLOWED_HOSTS,否则会直接抛出异常,连错误邮件的逻辑都走不到。把你的域名或者服务器IP加进去:

ALLOWED_HOSTS = ['你的域名.com', '服务器IP地址']

5. 检查自定义中间件是否拦截了错误

如果你写了自定义的异常处理中间件,有可能把500错误拦截了,导致Django默认的错误邮件逻辑没机会执行。可以暂时把自定义的异常中间件注释掉,再测试一次看看能不能收到邮件。

6. 手动触发错误并查看日志

写个测试视图手动触发500错误,同时看服务器日志有没有邮件发送相关的报错,能帮你定位具体问题:

def test_500(request):
    # 故意触发除以零的错误
    1 / 0

访问这个视图后,去看Django的日志,要是有类似Failed to send email的信息,就能知道具体是哪里出问题了。

7. 确认Gmail的权限设置

如果用的是Gmail,还要注意:如果开启了两步验证,得用应用专用密码代替普通密码;如果没开两步验证,要允许低权限应用访问(不过现在Gmail默认可能关掉了这个选项,更推荐用应用专用密码)。

先从前面几个步骤开始排查,尤其是前三个,都是最容易踩的坑!

内容的提问来源于stack exchange,提问作者Sam B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:15:21