matcornic/hermes
⭐ 2,994 · Go · GitHub 仓库
用于生成简洁、响应式HTML电子邮件的Golang包,适用于发送事务性邮件
awesome-go email email-template email-template-generator emails generator golang hermes
一句话总结
一个Go语言包,能够从结构化数据生成简洁、响应式的HTML邮件,并自动内联CSS和生成纯文本备用版本。
🔥 核心能力与独特卖点
- 单一模型双输出:只需使用结构化的
Email结构体定义一次邮件内容,Hermes即可同时生成响应式HTML(已内联CSS以兼容邮件客户端)和纯文本备用版本。这消除了维护两套模板的需求,并确保了可访问性。 - 内置专业主题:基于Postmark的事务性邮件模板,内置两套精美的开源主题("default"和"flat")。这解决了开发者的"空白画布"问题——无需雇佣设计师或与晦涩的HTML邮件怪癖搏斗,即可生成美观的响应式邮件。
- 通过Premailer自动内联CSS:自动将所有CSS样式内联到HTML元素中,这是确保在Gmail、Outlook和Apple Mail中一致渲染的关键步骤。这消除了邮件开发中的一大痛点——外部样式表经常被剥离。
- 声明式API的可定制组件:通过简单、符合Go语言习惯的结构体配置,支持操作按钮、数据表格、字典(键值对列表)、自定义引言/结语以及RTL文本方向。这使得复杂的交易邮件(收据、密码重置)可以通过编程方式轻松生成。
- 嵌入式模板简化部署:主题模板直接编译到Go二进制文件中,这意味着在生产部署中无需管理、复制或版本控制外部模板文件。
技术架构
| 组件 | 详情 |
|---|---|
| 语言 | Go (Golang) |
| 核心包 | 单一hermes包,包含两个主要结构体:Hermes(配置)和Email(内容) |
| 关键方法 | GenerateHTML(Email) 和 GeneratePlainText(Email) |
| CSS内联 | 使用 Premailer(Go移植版)内联CSS以兼容邮件客户端 |
| 主题系统 | 实现Theme接口;通过embed嵌入"default"和"flat"两套主题 |
| 邮件发送 | 不包含 – 仅生成HTML/纯文本字符串;需要外部SMTP客户端(如net/smtp) |
| 导入路径 | github.com/matcornic/hermes (v1.3.0+) 或 github.com/matcornic/hermes/v2 |
快速入门指南
- 安装包:
bash
go get github.com/matcornic/hermes@v1.3.0- 配置Hermes并生成邮件:
go
package main
import (
"fmt"
"github.com/matcornic/hermes"
)
func main() {
// 配置产品/公司品牌信息
h := hermes.Hermes{
Product: hermes.Product{
Name: "Hermes",
Link: "https://example-hermes.com/",
Logo: "http://www.duchess-france.org/wp-content/uploads/2016/01/gopher.png",
},
}
// 定义邮件内容
email := hermes.Email{
Body: hermes.Body{
Name: "Jon Snow",
Intros: []string{
"欢迎使用Hermes!我们非常高兴您的加入。",
},
Actions: []hermes.Action{
{
Instructions: "要开始使用Hermes,请点击此处:",
Button: hermes.Button{
Color: "#22BC66",
Text: "确认您的账户",
Link: "https://hermes-example.com/confirm?token=d9729feb74992cc3482b350163a1a010",
},
},
},
Outros: []string{
"需要帮助或有疑问?直接回复此邮件即可,我们很乐意提供帮助。",
},
},
}
// 生成HTML和纯文本两个版本
emailBody, err := h.GenerateHTML(email)
if err != nil {
panic(err)
}
emailText, err := h.GeneratePlainText(email)
if err != nil {
panic(err)
}
fmt.Println("HTML:", emailBody)
fmt.Println("纯文本:", emailText)
}优缺点与使用场景
优点
- 极其简洁的声明式API – 无需HTML/CSS知识即可生成专业邮件。
- 单一数据模型,双输出 – 消除模板重复,确保一致性。
- 自动CSS内联 – 开箱即用,解决了邮件客户端兼容性的头号问题。
- 嵌入式主题 – 零运行时依赖外部模板文件;简化CI/CD和容器化部署。
- 轻量且专注 – 只做一件事(邮件生成)并做到极致,没有功能臃肿。
缺点
- 仅限两套内置主题 – 自定义主题需要实现
Theme接口,比简单编辑HTML文件复杂得多。 - 无内置邮件发送功能 – 必须自行集成
net/smtp或外部邮件服务(SendGrid、AWS SES)。 - 模板定制依赖代码 – 非开发人员(如营销团队)无法轻松修改邮件设计,需要Go知识。
- 项目维护频率较低 – 上次更新为2026年5月,但核心功能稳定且成熟。
不适合谁使用?
- 需要高度定制、品牌专属邮件设计的团队 – 如果您需要超越两套主题的像素级完美、独特布局,可能需要自定义解决方案或更灵活的模板引擎。
- 非Go项目 – 这是Go专属包;Node.js用户应直接使用原版Mailgen库。
- 需要内置发送、分析或投递追踪的用户 – Hermes纯粹是生成工具;您需要额外集成邮件服务提供商。
理想使用场景
- SaaS平台和Web应用 – 需要标准交易邮件(欢迎、密码重置、发票、收据)。
- 认证系统(OAuth、SSO)– 需要干净、可靠的邮件验证和通知流程。
- 电商后端 – 生成订单确认、发货更新和购买收据。
- Go微服务 – 需要以编程方式生成邮件,而无需管理HTML模板或CSS文件。
社区与活跃度
Hermes在GitHub上拥有近3000颗星,显然在Go社区中引起了强烈共鸣。它被列入awesome-go,是Go生态系统中交易邮件生成的首选推荐。该项目成熟且稳定——v1.3.0和v2均可使用,核心API文档完善且附有示例。虽然提交频率有所放缓(上次更新为2026年5月),但这恰恰说明这是一个稳定、功能完备的项目,而非被遗弃的项目。对于一个专注的实用工具库来说,这正是我们想要的:它可靠工作,值得信赖,无需频繁迭代。