如何用Python调用SendGrid API将动态模板邮件保存为PDF?
解决方案
方案1:调用SendGrid Template Render API获取渲染后的HTML
SendGrid提供了Template Render API,可直接传入模板ID和动态数据,返回完整的渲染后HTML内容,后续即可轻松转换为PDF等格式。
步骤:
- 确保你的SendGrid API Key拥有
template.render权限 - 发送POST请求到
https://api.sendgrid.com/v3/templates/{template_id}/render,携带动态数据 - 拿到返回的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后转换格式。
步骤:
- 从SendGrid后台导出动态模板的HTML内容,注意将SendGrid模板语法替换为Jinja2兼容语法(
{{var}}基本通用,部分过滤器需微调) - 用Jinja2加载本地模板,传入动态数据生成HTML
- 转换为目标格式并上传
代码示例:
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
相关产品推荐
相关产品推荐

