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

如何无需发送邮件即可预览Django HTML邮件模板效果?

Django邮件模板预览方案(无需实际发送邮件)

针对你开发Django邮件模板时需要反复发件验证的问题,给你几个实用的本地预览方案,能精准模拟邮件客户端的CSS解析规则:

1. 用文件存储后端保存邮件为.eml文件

直接配置Django把邮件存到本地,不用实际发送:

  • 修改settings.py:
    EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
    EMAIL_FILE_PATH = '/tmp/django-emails'  # 可自定义本地路径,确保目录存在
    
  • 触发邮件发送后,指定目录会生成.eml格式的邮件文件,用Thunderbird、Outlook等本地邮件客户端打开,就能看到和实际收件完全一致的渲染效果,包括内联CSS和cid图片。

2. 写预览视图快速验证变量与布局

如果需要快速看上下文变量填充和大致布局,可以做一个专门的预览视图,同时兼容cid图片显示:

  • 示例视图代码:
    from django.shortcuts import render
    from django.template.loader import get_template
    
    def email_preview(request):
        # 模拟邮件所需的上下文变量
        context = {
            # 替换成你实际用的变量,比如username、registration_date等
        }
        template = get_template('your_email_template.html')
        # 把cid图片替换为静态文件路径(仅预览用)
        email_html = template.render(context).replace('cid:top.jpg', '/static/images/top.jpg')
        return render(request, 'email_preview_wrapper.html', {'email_content': email_html})
    
  • 配套的email_preview_wrapper.html(模拟邮件客户端容器):
    <!DOCTYPE html>
    <html>
    <head>
        <style>
            .preview-container {
                width: 900px;
                margin: 20px auto;
                border: 1px solid #ddd;
                padding: 10px;
                background: #fff;
            }
        </style>
    </head>
    <body>
        <div class="preview-container">
            {{ email_content|safe }}
        </div>
    </body>
    </html>
    
  • 访问这个视图就能快速看变量是否正确,布局是否合理,再结合.eml文件做精准验证。

3. 手动生成完整.eml文件

如果需要更灵活的控制,直接用EmailMessage生成完整邮件文件:

from django.core.mail import EmailMessage
from django.template.loader import render_to_string

# 准备上下文和模板内容
context = {}  # 你的变量
html_content = render_to_string('your_email_template.html', context)

# 构建邮件对象
email = EmailMessage(
    subject="测试预览邮件",
    body=html_content,
    from_email="noreply@schmerz-experts.de",
    to=["test@example.com"],
)
email.content_subtype = "html"

# 添加cid图片附件
email.attach_file("/path/to/your/static/images/top.jpg", mimetype="image/jpeg")
email.attachments[0].set_content_id("<top.jpg>")  # 和模板里的cid对应

# 保存为.eml文件
with open("/tmp/preview.eml", "wb") as f:
    f.write(email.message().as_bytes())

生成的.eml文件用邮件客户端打开,完全还原实际收件效果。

内容的提问来源于stack exchange,提问作者Minibumphead

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:50:30