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

如何在Django联系表单中用模板渲染接收邮件的内容?

实现HTML格式的联系表单邮件

你需要创建一个HTML邮件模板,把表单提交的数据渲染到这个模板里,再作为HTML邮件发送即可,不需要把表单和模板直接关联。具体操作步骤如下:

1. 创建HTML邮件模板

在你的Django项目模板目录下新建一个HTML文件,比如email_contact_template.html,可以参考下面的排版(样式可按需调整):

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>新咨询邮件</title>
    <style>
        .mail-box {
            max-width: 600px;
            margin: 20px auto;
            padding: 25px;
            border: 1px solid #e0e0e0;
            border-radius: 8px;
        }
        .info-row {
            margin-bottom: 18px;
            line-height: 1.6;
        }
        .info-label {
            font-weight: 600;
            color: #2d3748;
            display: inline-block;
            width: 80px;
        }
        .message-block {
            margin-top: 25px;
            padding: 18px;
            background-color: #f7fafc;
            border-radius: 4px;
        }
    </style>
</head>
<body>
    <div class="mail-box">
        <h3>收到新的咨询请求</h3>
        <div class="info-row">
            <span class="info-label">姓名:</span>{{ full_name }}
        </div>
        <div class="info-row">
            <span class="info-label">邮箱:</span>{{ email }}
        </div>
        <div class="message-block">
            <span class="info-label">内容:</span><br>{{ message|linebreaks }}
        </div>
    </div>
</body>
</html>

2. 修改视图函数

导入Django的render_to_string工具,用它把表单数据渲染到刚才的HTML模板里,再通过send_mail的html_message参数发送HTML格式邮件。修改后的代码如下:

from django.shortcuts import render, redirect
from django.core.mail import send_mail, BadHeaderError
from django.http import HttpResponse
from django.template.loader import render_to_string  # 新增导入

def contactPage(request):
    if request.method == 'POST':
        form = contactForm(request.POST)
        if form.is_valid():
            subject = "INQUIRY" 
            # 提取表单清理后的数据
            full_name = form.cleaned_data['full_name']
            email = form.cleaned_data['email_address']
            message = form.cleaned_data['message']

            # 渲染HTML邮件模板
            html_content = render_to_string('email_contact_template.html', {
                'full_name': full_name,
                'email': email,
                'message': message,
            })
            # 同时准备纯文本版本,兼容不支持HTML的邮箱
            plain_text_content = f"姓名:{full_name}\n邮箱:{email}\n咨询内容:\n{message}"

            try:
                send_mail(
                    subject,
                    plain_text_content,  # 纯文本内容作为 fallback
                    '',  # 留空则使用settings里配置的DEFAULT_FROM_EMAIL
                    ['your-receive-email@example.com'],  # 替换为实际收件邮箱
                    html_message=html_content  # 指定HTML格式内容
                )
            except BadHeaderError:
                return HttpResponse('Invalid header found.')
            return redirect('thankyou')
      
    form = contactForm()
    return render(request, "contact.html", {'form':form})

关键说明

  • 核心逻辑是把表单数据传递给邮件模板,渲染成HTML后发送,不需要给表单本身绑定模板。
  • 保留纯文本版本是为了兼容老旧邮箱或禁用HTML显示的邮箱,确保所有收件人都能正常查看内容。
  • 记得把代码里的收件邮箱替换成你实际要接收邮件的地址,同时确保Django配置文件里的DEFAULT_FROM_EMAIL已正确设置(如果发件人留空的话)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:15:37