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

在Django项目中使用SendGrid发送带HTML模板的邮件

当然可以实现!在Django项目里结合SendGrid发送带模板、支持上下文传参的美观HTML邮件,有两种实用方案,我给你一步步拆解:

方案一:用Django内置模板系统渲染HTML邮件

这种方式最贴合Django项目的开发习惯,你可以像写普通Django模板一样维护邮件HTML,还能用上Django的模板标签和过滤器。

步骤1:创建HTML邮件模板

在你的Django项目模板目录下(比如templates/email/)新建一个HTML模板文件,比如welcome_email.html:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>{{ email_subject }}</title>
    <style>
        /* 可以在这里添加CSS样式,让邮件更美观 */
        body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
        .container { max-width: 600px; margin: 0 auto; padding: 20px; border: 1px solid #eee; border-radius: 8px; }
        .greeting { font-size: 1.2em; font-weight: bold; }
    </style>
</head>
<body>
    <div class="container">
        <p class="greeting">Hi {{ username }}!</p>
        <p>感谢你注册我们的服务,这是一封测试邮件。</p>
        <p>你的注册邮箱是:<strong>{{ user_email }}</strong></p>
        <p>如果有任何问题,随时联系我们~</p>
        <p>祝好,<br>我们的团队</p>
    </div>
</body>
</html>

步骤2:用Django模板渲染并发送邮件

修改你的SendGrid代码,用render_to_string渲染模板并传入上下文:

from django.template.loader import render_to_string
import sendgrid
import os
from sendgrid.helpers.mail import Email, Content, Mail

# 准备要传入模板的上下文数据
email_context = {
    'username': '张三',
    'user_email': 'user@example.com',
    'email_subject': '欢迎加入我们的平台!'
}

# 用Django模板渲染HTML内容
html_content = render_to_string('email/welcome_email.html', email_context)

# 初始化SendGrid客户端
sg = sendgrid.SendGridAPIClient(apikey=os.environ.get('SENDGRID_API_KEY'))
from_email = Email("admin@example.com")
to_email = Email(email_context['user_email'])
subject = email_context['email_subject']

# 创建HTML类型的邮件内容对象
content = Content("text/html", html_content)
mail = Mail(from_email, subject, to_email, content)

# 发送邮件并打印响应
response = sg.client.mail.send.post(request_body=mail.get())
print(response.status_code)
print(response.body)
print(response.headers)

注意事项

  • 确保你的模板路径在Django的TEMPLATES配置中能被找到:要么把模板所在的app加入INSTALLED_APPS,要么在TEMPLATES['DIRS']里添加模板目录路径。
  • 邮件里的CSS尽量用内联样式,因为部分邮件客户端对外部样式支持不好。
方案二:使用SendGrid官方动态模板

如果你的团队有专门的运营人员维护邮件模板,或者想在SendGrid后台统一管理模板,这种方案更合适。

步骤1:在SendGrid后台创建动态模板

  1. 登录SendGrid后台,进入「Email API」→「Dynamic Templates」
  2. 创建新模板,设计HTML内容并设置动态变量(比如{{username}}、{{user_email}})
  3. 记录模板的ID

步骤2:用模板ID发送邮件

直接在代码中指定模板ID,并传入动态上下文数据:

import sendgrid
import os
from sendgrid.helpers.mail import Email, Mail

sg = sendgrid.SendGridAPIClient(apikey=os.environ.get('SENDGRID_API_KEY'))
from_email = Email("admin@example.com")
to_email = Email("user@example.com")

# 初始化邮件对象
mail = Mail(from_email, to_email)
# 设置你的SendGrid动态模板ID
mail.template_id = "your-sendgrid-template-id-here"

# 传入动态上下文数据,对应模板里的变量
mail.dynamic_template_data = {
    'username': '张三',
    'user_email': 'user@example.com',
    'email_subject': '欢迎加入我们的平台!'
}

# 发送邮件
response = sg.client.mail.send.post(request_body=mail.get())
print(response.status_code)
print(response.body)
print(response.headers)

两种方案各有优势:方案一适合开发者自主维护模板,能复用Django的模板能力;方案二更适合非技术人员管理模板,模板修改不需要改动代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:18:13