跳转到主内容
极星编程网:以代码为星,赴技术山海!

Golang怎么用template实现邮件模板渲染_Golang如何用text/template生成动态文本内容【方法】

直接用 text/template 即可,需注意数据结构、转义和错误处理:加载用 template.Must(template.ParseFiles("email.txt")),渲染用 t.Execute(&buf, data) 并检查 error;HTML 内容需用 template.HTML 类型配合 safeHTML;复用片段用 {{define}} 和 {{template}};多文件用 ParseGlob;发送前校验换行符、CSS 兼容性、UTF-8 编码及字段导出。 直接用
text/template
就行,不用额外依赖,但必须注意数据结构、转义和错误处理——否则发出去的邮件里全是
{{.Name}}
或者 HTML 标签被当成纯文本显示。 怎么加载并执行一个简单的邮件模板 模板文件(比如
email.txt
)写成纯文本或 HTML 都可以,
text/template
本身不区分格式,只管替换变量:
Hi {{.Name}},
Your order #{{.OrderID}} has been shipped.
Tracking: {{.TrackingCode}}
Go 代码里加载并渲染: 用
template.Must(template.ParseFiles("email.txt"))
加载,它会在解析失败时 panic,适合启动时加载 调用
t.Execute(&buf, data)
渲染,
data
必须是 map、struct 或支持字段访问的类型 别忘了检查
Execute
的返回 error——空字段、类型不匹配、嵌套 nil 都会在这里报错,不是编译期问题 为什么邮件里 HTML 标签没渲染,反而显示成 Hello 因为
text/template
默认对所有输出做 HTML 转义,防止 XSS。但邮件正文如果是 HTML 格式,你并不想让
<
变成
。
立即学习 “ go语言免费学习笔记(深入) ”; 用
{{.HTMLBody | safeHTML}}
显式标记可信内容(前提是
.HTMLBody
是
template.HTML
类型) 或者把模板变量定义为
template.HTML
类型:比如
data := struct{ Body template.HTML }{Body: template.HTML(`Hello`)}
千万别用
strings.ReplaceAll
去“手动解码”转义后的字符串——这会破坏其他本该转义的内容,比如用户昵称里的