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模板:
- 先安装依赖:
pip install jinja2 - 代码示例:
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
相关产品推荐
相关产品推荐

