Django发送的HTML邮件模板无法在Gmail中正常渲染的问题咨询
Gmail端邮件样式渲染失效的排查修复
问题根因
两个独立问题叠加导致样式完全无法展示:
1. Django发送逻辑参数错误
admin.py中的send_mail调用存在参数遗漏:
Django内置send_mail方法的HTML内容必须通过html_message关键字参数显式传入,纯文本内容作为第二个位置参数传入。
当前的调用代码:
send_mail(subject, plain_message, 'aaaaa@gmail.com', [email], fail_silently=True)
全程没有引用渲染完成的html_message变量,HTML模板根本没有被附加到邮件中,发出的邮件只有被strip_tags剥光所有标签的纯文本,自然没有任何样式。
2. 邮件模板不符合Gmail渲染规则
即使补全发送参数,当前模板写法也会被Gmail过滤掉大部分样式:
- Gmail会直接移除
<head>内所有<style>块的CSS规则,你写的类选择器样式、@media响应式规则会被完全删除,不生效 - 模板中的banner区块、标题、操作按钮的核心样式全部依赖被过滤的类名规则,没有把样式直接写到元素上
修复操作
- 补全发送接口参数,正确传入渲染好的HTML模板:
send_mail( subject, plain_message, 'aaaaa@gmail.com', [email], fail_silently=True, html_message=html_message )
- 将所有核心展示样式从内部样式表迁移到元素的内联
style属性上,不依赖类名或<style>块控制样式:- 给banner对应的
<td>元素直接加上background-color: #eb681f内联样式,替换class="banner-color"的类规则 - 给标题对应的
<h3>元素直接加上color: #0066cc内联样式,替换class="title-color"的类规则 - 给按钮对应的
<a>元素直接加上background-color: #0066cc内联样式,替换class="button-color"的类规则
注意:Gmail对内部样式表的支持非常有限,所有影响核心视觉的样式必须全部内联,否则一定会被平台过滤。
- 给banner对应的
内容的提问来源于stack exchange,提问作者Jorge López
相关产品推荐
相关产品推荐

