Django Logging告警邮件未送达其余邮件发送正常问题咨询
Django AdminEmailHandler 邮件被Gmail拒收原因及解决方案
核心原因
- 反垃圾规则匹配:AdminEmailHandler发送的告警邮件有固定特征:默认携带
X-Django-Logger专用头、内容包含大量代码堆栈、错误日志等特殊字符,重复发送时内容相似度极高,极易触发Gmail反垃圾策略。而普通业务邮件内容场景更合规,Gmail对其校验容错度更高,因此不会被拦截。 - HTML内容违规:你配置了
include_html: True,AdminEmailHandler自动生成的HTML告警邮件包含大量内联样式、自动生成的跳转链接,不符合Gmail HTML邮件规范,被判定为恶意内容直接拒收。 - 域名校验容错差:如果你的发件域名没有配置SPF、DKIM解析,本身发信信任度偏低,内容风险更高的告警邮件会优先被拦截,普通业务邮件因为内容风险低,即使校验不完全通过也可能正常投递。
快速修复方案
- 先将
include_html参数改为False,测试纯文本告警邮件是否能正常送达 - 给告警邮件添加自定义标题前缀,避免和通用垃圾邮件模板匹配,修改后的配置参考:
LOGGING = { 'version': 1, 'handlers': { 'mail_admins': { 'level': 'ERROR', 'class': 'django.utils.log.AdminEmailHandler', 'include_html': False, 'email_subject_prefix': '[你的业务名生产告警] ' }, }, 'loggers': { 'django.request': { 'handlers': ['mail_admins'], 'level': 'ERROR', 'propagate': False, }, } }
- 将告警收件人账号添加到发件人的联系人列表,降低反垃圾规则权重。
拦截邮件查询方式
如果你使用的是Google Workspace企业账号,可以登录管理员账号,在「管理控制台 > 应用 > Google Workspace > Gmail > 电子邮件日志搜索」中查询最近30天的所有邮件流转记录,包含被拒收、投递失败、判定为垃圾邮件的具体拦截原因。
个人Gmail账号不会留存被拒收的邮件,也没有对应的查询入口。
内容的提问来源于stack exchange,提问作者1D0BE
相关产品推荐
相关产品推荐

