Skip to content

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

快速入门指南

  1. 安装包
bash
go get github.com/matcornic/hermes@v1.3.0
  1. 配置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月),但这恰恰说明这是一个稳定、功能完备的项目,而非被遗弃的项目。对于一个专注的实用工具库来说,这正是我们想要的:它可靠工作,值得信赖,无需频繁迭代。

热点项目数据来自 GitHub API,实时更新