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

如何用Python调用SendGrid API将动态模板邮件保存为PDF?

解决方案

方案1:调用SendGrid Template Render API获取渲染后的HTML

SendGrid提供了Template Render API,可直接传入模板ID和动态数据,返回完整的渲染后HTML内容,后续即可轻松转换为PDF等格式。

步骤:

  1. 确保你的SendGrid API Key拥有template.render权限
  2. 发送POST请求到https://api.sendgrid.com/v3/templates/{template_id}/render,携带动态数据
  3. 拿到返回的HTML后,用工具转换为目标格式

代码示例:

import requests
import pdfkit

# SendGrid配置
SENDGRID_API_KEY = "your_api_key"
TEMPLATE_ID = "your_template_id"
dynamic_data = {"name": "John", "order_id": "12345"}  # 你的动态数据

# 调用Render API获取渲染后的HTML
url = f"https://api.sendgrid.com/v3/templates/{TEMPLATE_ID}/render"
headers = {"Authorization": f"Bearer {SENDGRID_API_KEY}", "Content-Type": "application/json"}
response = requests.post(url, json={"data": dynamic_data})
rendered_html = response.json()["html"]

# 将HTML转成PDF(需提前安装wkhtmltopdf,pdfkit是其Python封装)
pdfkit.from_string(rendered_html, "sent_email.pdf")

# 后续执行PDF上传操作

方案2:本地复用模板渲染(无需调用SendGrid API)

如果能将SendGrid动态模板的内容导出到本地,可使用Python模板引擎(如Jinja2)重现渲染逻辑,生成HTML后转换格式。

步骤:

  1. 从SendGrid后台导出动态模板的HTML内容,注意将SendGrid模板语法替换为Jinja2兼容语法({{var}}基本通用,部分过滤器需微调)
  2. 用Jinja2加载本地模板,传入动态数据生成HTML
  3. 转换为目标格式并上传

代码示例:

from jinja2 import Environment, FileSystemLoader
import pdfkit

# 加载本地模板(假设模板文件存于templates文件夹,名为email_template.html)
env = Environment(loader=FileSystemLoader("templates"))
template = env.get_template("email_template.html")

# 渲染HTML
dynamic_data = {"name": "John", "order_id": "12345"}
rendered_html = template.render(dynamic_data)

# 转PDF
pdfkit.from_string(rendered_html, "sent_email.pdf")

# 执行上传操作

补充说明

  • 转PDF工具除了pdfkit,也可使用weasyprint,安装和使用逻辑类似,可按需选择
  • 若需生成.docx格式,可先将HTML转换为docx,比如用python-docx配合HTML解析工具生成文档

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:40:04