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

Python发送HTML邮件时如何将变量传递到HTML模板文件中

实现方法

你可以通过以下几种方式完成占位符替换,从简单到复杂按需选择:

方法1:直接字符串替换(无需额外依赖,适合少量占位符)

这是最便捷的方案,直接对读取到的HTML字符串做占位符替换即可,你只需要提前定义好userEmail变量的具体值,再修改读取HTML后的逻辑就行:

# 提前定义要传入的变量
userEmail = "xxx@example.com"

# 读取HTML时建议指定编码避免乱码
html = open('email.html', 'r', encoding='utf-8').read()
# 替换占位符
html = html.replace("{{userEmail}}", userEmail)
print(html)
msg.add_alternative(html, subtype='html')

补充小提示:你当前的HTML模板里第二个<h3>是未闭合的错误写法,建议改成</h3>避免邮件渲染异常

方法2:Python内置字符串格式化(适合多个占位符)

如果后续还有其他变量要传入,可以把占位符改成单大括号格式{userEmail},直接用format方法批量传值:
首先修改HTML模板里的占位符:

<h3 style="font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;font-size: large;font-weight: bold;">Hey there, {userEmail}!</h3>

Python代码对应修改为:

userEmail = "xxx@example.com"
html = open('email.html', 'r', encoding='utf-8').read()
html = html.format(userEmail=userEmail)
# 有多个变量的话直接往后加参数即可,比如html.format(userEmail=userEmail, userName=userName)

方法3:使用Jinja2模板引擎(适合复杂模板场景)

如果后续你的邮件模板需要用到循环、判断等复杂逻辑,可以使用专业的Python模板库Jinja2,该方案天生支持你原来的{{变量名}}格式的占位符,不需要修改HTML模板:

  1. 先安装依赖:pip install jinja2
  2. 代码示例:
from jinja2 import Template

userEmail = "xxx@example.com"
html = open('email.html', 'r', encoding='utf-8').read()
template = Template(html)
html = template.render(userEmail=userEmail)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:18:04