BillionMail:8分钟自建开源邮件服务器与营销平台

BillionMail:8分钟自建开源邮件服务器与营销平台

商城已上线,快去看看吧!

做邮件营销的人大概都遇到过这样的场景:花了几千块买第三方群发服务,活动结束却拿不到原始名单,送达率、打开率、退信原因全凭平台一句「已发送」;想自建 Postfix 又被 DNS 的 SPF/DKIM/DMARC、SSL 证书续期、反垃圾策略、fail2ban 封禁规则折腾到凌晨三点。今天要聊的 BillionMail,正是冲着这个夹缝来的——把 MTA 运维、证书自动化、可视化邮件设计、AI 模板生成和投递数据分析,打包成一个可以 Docker 一键跑起来的自托管平台。

01🔥 痛点切入:邮件营销的「三座大山」

先梳理一下,为什么一个开源邮件服务器值得我们在 2024 年重新关注。

  • 第一座山是成本与数据主权。主流 SaaS 邮件营销平台按联系人数量阶梯计费,名单越大账单越吓人。更关键的是,你的订阅者名单、打开行为、点击数据,本质上都托管在别人家的数据库里。一旦账号被封或服务涨价,多年积累的客户资产说没就没。
  • 第二座山是自建的工程复杂度。自己搭 Postfix + Dovecot + RoundCube 只是入门,真正难的是:SPF/DKIM/DMARC 三条记录的配置、Let‘s Encrypt 证书的自动签发与续期、DNS 记录校验、IP 被拉黑后的处理、日志审计、多进程守护。一个环节出错,邮件就进垃圾箱,而且你还不知道是哪一步出的问题。
  • 第三座山是营销侧的效率。运维搭好了,运营同学要设计一封 HTML 邮件,还得懂表格布局、内联样式、深色模式兼容……很多小团队干脆放弃,退化成纯文本群发,转化率自然惨淡。

BillionMail 的野心,就是把这三座山一次性铲平。它不是一个单纯的 Mail Server,也不是一个单纯的群发工具,而是一个「服务器 + 设计器 + 数据分析 + AI」的一体化平台。

BillionMail Banner

02📧 项目定位与价值:一句话说清它是什么

一句话定位:BillionMail 是一个基于 Go(GGoFrame v2) + Vue3 自研的全栈开源邮件服务器与邮件营销平台,将 MTA 运维、DNS/SSL 自动化、可视化邮件编辑、AI 模板生成与投递数据分析打包成可 Docker 一键部署的一体化方案。

它和常见方案的区别在于:

  • 对比 Mailchimp / SendGrid 这类 SaaS:BillionMail 可以完全自托管,数据在你自己手里,且不按联系人收费,同时你能下钻到 DSN 代码、relay 链路、投递延迟这些底层细节。
  • 对比 纯 Postfix / Dovecot 自建:BillionMail 把 DNS 校验、ACME 证书、fail2ban 防护、进程守护全部产品化,还额外送你一套前端营销面板。
  • 对比 Mautic / Listmonk 这类开源营销工具:BillionMail 是「MTA + 营销」一体的,它自己就是邮件服务器,不需要你再对接外部 SMTP 网关。

项目采用 MIT 许可证,目前已有 1240 个文件,主要语言是 Go、Shell、YAML、SQL 与配置,从前端模板到后端 API、再到容器镜像构建,覆盖了完整的技术栈。

03✨ 核心能力全景:从输入到输出的闭环

如果把 BillionMail 抽象成一个数据处理管道,它其实是这样一条链路:

  • 输入层:发件域名(DNS 记录)、联系人名单(带标签分组)、邮件内容(手写、可视化编辑或 AI 生成)、投递策略(即时/定时/人群圈选)。
  • 处理层:ACME 自动签发证书 → 域名 DKIM/SPF 校验 → 模板渲染 → 队列调度 → MTA 投递 → 结果回写。
  • 输出层:送达/打开/点击/退信指标、按服务商维度的统计图表、失败投递明细(含 DSN、relay、延迟字段),以及内置 RoundCube 网页邮箱。

下面这几项核心功能都是真实实现的,不是 README 里的口号:

1. 可视化邮件模板编辑器

前端基于 Pinia 的 EmailEditor store,用 columns / cell / block 三层数据模型维护页面背景色、宽度、字体等配置,并记录当前选中块与块类型。这意味着非技术人员也能像搭积木一样拖拽编辑营销邮件,无需写一行 HTML,而且所有样式配置都被结构化持久化,方便复用与版本管理。编辑器还支持区块级编辑与 saveFn 自动保存回调。

2. AI 邮件模板生成与对话式创作

AITemplate 控制器调用后端 /askai 创建 chat,并据此生成模板,还能获取 AI 模型列表与聊天详情。它支持停止会话、Shift+Enter 换行,并用 Map 记录对话内容与 token 用量。后端直接依赖 go-openai 与 tiktoken-go。用户只需用自然语言描述需求,AI 就能直接产出营销邮件,同时实时跟踪 token 消耗,把创意与排版门槛降到最低。

3. AI 模型供应商管理

ai-model 设置页控制器封装了 /askai/supplier/* 系列接口,支持供应商与模型的列表拉取、新增、配置读取与切换、启停(带失败回滚)以及 API 配置检查。这让用户可以在界面上接入并随时切换 OpenAI 等多家大模型供应商,掌握自己的 API 成本与可用性,避免被单一厂商绑定。

4. 邮件投递总览分析仪表盘

overview 页面对发送、送达、打开、点击、退信等核心指标做聚合,提供按邮件服务商维度的统计,以及发送量/打开率/点击率/退信率图表数据,甚至还包含失败投递记录的结构(含 DSN、relay、延迟字段)。营销人员能直观看到送达率与互动率,定位是哪家服务商或哪个环节导致退信与延迟,从而优化发送策略。

5. 联系人标签与批量分组管理

contacts/tags 服务层封装了 /tags 接口的列表、全量查询、创建、更新、删除,以及按 group 批量给联系人打标签。所有写操作统一带 i18n loading 文案与成功提示。用户可以按标签做人群圈选,为不同人群发送差异化内容,提升营销精准度。

6. 系统设置与安全配置中心

通用 settings Store 负责拉取并映射系统配置,管理安全、网络、SSL 证书过期时间与剩余天数、IP 白名单、API、反向代理、端口、时区等。它会按长度以及大小写、数字、符号五项规则计算密码强度。管理员可在一个界面完成安全与网络合规配置,并即时看到密码强度和证书到期提醒,降低被入侵与掉线风险。

7. ACME 自动签发与多云 DNS 验证

独立的 core/cmd/acme CLI 入口剥离参数后,委托 service/acme 执行 RunCLI,底层依赖 go-acme/lego,并间接引入 AWS、Azure、阿里云等 DNS 厂商 SDK。发送域名可以自动完成 DNS 记录校验并免费签发/续期 SSL 证书,免去手工操作与证书过期导致的投递失败。

8. 请求鉴权与智能请求管理

前端 axios 封装会注入 Bearer Token,以 method/url/params/data 生成请求 key,并用 AbortController 取消重复请求。遇到 401 会重置登录并跳转,octet-stream 响应自动下载文件,超时设置为 600s。重复提交不会造成脏数据,登录态失效能自动引导重新登录,报表/附件可一键下载。

04🏗️ 技术架构与设计取舍

BillionMail 采用的是前后端一体化的架构,但开发上是分离的:

  • 服务端:Go 语言,基于 GGoFrame v2 框架,搭配 PostgreSQL 与 Redis。GoFrame 提供了路由、ORM、配置、日志、中间件等企业级基建,能显著降低一个「多模块 SaaS 级后端」的脚手架成本。
  • 前端:Vue 3.5 + Pinia + Rsbuild + UnoCSS。集成了 monaco 代码编辑器、wangeditor 富文本与 echarts 图表,撑起了可视化编辑器、AI 对话面板和数据仪表盘这三块重交互界面。
  • 容器层:按 TARGETARCH 分发二进制的 Alpine 镜像,supervisord 托管多进程,集成 fail2ban、iptables/ipset 与 rsyslog,形成开箱即用的防护与日志体系。

这套选型有几个明显的取舍值得说:

  • 取舍一:为什么要自研而不是套壳开源组件?市面上其实有 Mailcow、Mailu 这类成熟的邮件服务器套件,但它们偏向「运维型」,缺少现代的营销侧界面。BillionMail 选择从零自研前后端,是为了让「服务器」和「营销」在数据模型层面天然打通——比如一封邮件的投递记录,可以直接关联到某个标签人群和某次活动,这是拼装方案很难做到的。
  • 取舍二:为什么把 AI 做进后端而不是外挂?因为 token 用量、会话记录、供应商切换这些状态需要和模板绑定。后端直接依赖 go-openai 与 tiktoken-go,前端有独立的 AI 模板控制器与模型供应商设置页,形成一个可管理的 AI 能力层,而不是一个孤立的「调 OpenAI」按钮。
  • 取舍三:容器里塞 supervisor + fail2ban 值不值?从「一个容器跑一切」的角度看略显笨重,但对目标用户(中小团队、DevOps)来说,能省掉大量运维文档,这种「把复杂度封装在产品里」的思路是合理的。

05🔍 关键模块源码拆解

入口与 API 路由层

服务端的入口是 core/main.go,它是整个 Go 二进制的启动点,负责初始化配置、数据库连接、Redis 以及 HTTP 服务的挂载。紧接着是领域化的 API 组织,比如域名管理模块:

core/api/domains/domains.go

core/api/domains/v1/domain_blocklist.go

可以看到 domains 模块按 v1 版本分层,把「域名黑名单」这种具体能力拆进独立的 domain_blocklist.go。这种按领域 + 版本切分的结构,意味着未来新增 v2 接口时可以平滑演进,不会互相污染。域名模块本身承载的是发件域名的创建、DNS 校验触发、与 ACME 证书流程的衔接——它是整个投递链路的起点。

ACME 证书签发:一个独立的 CLI

证书自动化被单独抽成了一个 CLI 入口 core/cmd/acme。它的逻辑很清晰:入口先剥离命令行参数,然后委托给 service/acme 的 RunCLI 去真正执行。真正干活的 service/acme 依赖 go-acme/lego,而 lego 又间接引入了 AWS/Azure/阿里云等厂商的 DNS SDK,从而支持在多云环境下完成 DNS-01 挑战的验证。

这里的设计意图值得学习:ACME 是一个「有状态、要联网、可能阻塞」的耗时操作,把它独立成 CLI,可以由 supervisor 或定时任务单独调度,不和主 HTTP 服务抢资源,失败也容易重试和排查。这比塞进 Web 请求里优雅得多。

前端状态层:Pinia 的双核心

前端有两个 Store 是理解业务的关键:

  • EmailEditor store:维护 columns/cell/block 数据模型、页面背景/宽度/字体配置、当前选中块类型,并对外暴露 saveFn。它把「一封邮件」抽象成可序列化的数据树,从而让可视化编辑、AI 生成、模板复用都能复用同一份状态。
  • settings store:拉取系统配置并做字段映射,计算 SSL 证书剩余天数、按五项规则打分密码强度。它本质上是「系统配置的唯一真相源」,前端各页面都从这里读安全/网络/SSL 配置。

配合 Pinia 持久化插件与路由守卫,实现了鉴权白名单与语言(en/zh/ja)初始化。这是一个相当成熟的工程化前端基建。

请求层:axios 封装的三板斧

前端对 axios 的封装实现了三件事:

// 概念示意

1. 注入 Bearer Token

2. key = method + url + params + data,用 AbortController 取消重复请求

3. 401 -> 重置登录态并跳转;octet-stream -> 自动下载文件

其中「按请求 key 去重」是个非常实用的细节:用户在仪表盘疯狂点筛选时,旧请求会被自动取消,避免慢响应覆盖新结果导致的数据错乱。这种细节往往决定了产品「手感」的优劣。

06📊 项目效果展示

除了功能界面,项目的社区关注度也可以作为一个参考指标。

从项目定位来看,它的增长曲线反映了市场对「自托管 + 营销一体化」这类方案的真实需求。

07🔄 完整运行流程:一封信的旅程

我们把上面所有模块串起来,走一遍「从 AI 生成到投递分析」的完整路径:

  1. 创建发件域名:在 settings 页添加域名,触发 core/api/domains 模块的创建接口。
  2. DNS 校验 + 证书签发:ACME CLI 通过 service/acme 调用 lego,向对应 DNS 厂商提交 TXT 记录完成 DNS-01 挑战,签发 SSL 证书并记录过期时间。
  3. AI 生成邮件:在 AITemplate 控制器里调用 /askai 创建 chat,后端用 go-openai 请求模型,用 tiktoken-go 统计 token 用量,返回内容写入 EmailEditor 数据模型。
  4. 可视化微调:在 EmailEditor 中拖拽调整 columns/cell/block,配置背景色与宽度,saveFn 自动持久化。
  5. 选择人群:通过 contacts/tags 服务按 group 批量筛选标签人群。
  6. 投递与回写:MTA 投递结果(含 DSN、relay、延迟)回写数据库。
  7. 数据复盘:overview 仪表盘聚合发送/送达/打开/点击/退信指标,按服务商维度出图,失败记录可下钻。

整个链路里,前端 store、后端 API、CLI、容器守护进程各司其职,职责边界相当清晰。

08🚀 快速上手

官方宣称从安装到成功发送第一封邮件只需 8 分钟。核心步骤如下:

# 方式一:Docker Compose

# 拉取镜像并启动,镜像按 TARGETARCH 自动选择二进制

# 方式二:使用内置 bm 管理脚本

bm install

bm update

# 启动后通过 /roundcube/ 访问内置网页邮箱

启动后你会得到:

  • 一个 Web 管理面板(Vue3 前端),用于域名、联系人、模板与设置管理;
  • 一个内置的 RoundCube 网页邮箱,路径为 /roundcube/;
  • 由 supervisord 托管的 MTA、rsyslog、fail2ban 等进程;
  • 支持 en / zh / ja / tr 多语言界面。

建议的首次运行顺序是:先配置发件域名并等待 ACME 证书签发成功,再导入联系人并打标签,然后用 AI 或编辑器生成第一封模板邮件,发给测试人群看投递结果。

09🎯 适用场景、限制与改进方向

谁最适合用它

  • 中小企业/创业公司的邮件营销与增长团队:买第三方群发服务成本高、名单与数据被平台掌握、送达率与退信原因不透明,且缺乏易用的模板设计工具。BillionMail 自带可视化编辑器、AI 生成模板、标签分组与送达/打开/点击/退信分析,能在一套自托管平台内完成从设计到追踪的全流程。
  • 需要自建 MTA 的运维与 DevOps 团队:自建 Postfix/DNS/SSL/反垃圾链路繁琐,证书续期、IP 封禁防护与多进程管理耗时易错。BillionMail 提供 Docker 一体化镜像(supervisor + rsyslog + fail2ban)、ACME 自动签发与多云 DNS 验证、bm 管理脚本和 Web 化系统设置,把运维复杂度产品化。
  • 独立开发者、站长与小团队:预算有限,既要专业营销能力,又要数据自主可控、可本地化部署且界面支持母语。BillionMail 开源可自托管、Docker 一键安装、内置 RoundCube 与多语言界面,用极低成本获得完整邮件能力。
  • 邮件代运营/代理商与技术服务方:需要为多个客户批量管理发送域名、隔离配置与合规要求。系统设置集中管理域名、SSL、网络、IP 白名单与 API,并可通过 AI 供应商切换控制成本。

典型使用场景

  • 用 AI 对话生成一封新品推广邮件,在可视化编辑器中微调后,选择标签人群立即或定时群发。
  • 为多个发送域名自动完成 DNS 验证与免费 SSL 签发续期,确保投递链路合规可用。
  • 在总览仪表盘查看各服务商的送达率、打开率、点击率与退信率,下钻失败记录定位 DSN/relay 延迟问题。
  • 为不同客户分组建标签、批量打标,按人群发送差异化 Newsletter 并追踪效果。
  • 通过 Docker Compose 或 bm 脚本一键安装/更新,本地化自建整套邮件服务器与营销平台。
  • 通过 /roundcube/ 访问内置网页邮箱收发与管理邮件。

限制与改进方向

客观来说,这类「大而全」的方案天然有取舍:

  • 规模天花板:单机自建邮件服务器的 IP 信誉维护、出站限速和发送配额管理是个长期课题,达到「亿级」发送量需要专业的 IP 池与预热策略,自托管方案需要自行承担这部分运营。
  • AI 能力依赖外部 API:虽然支持多供应商切换,但本质上仍是调用外部大模型,token 成本与网络可用性受供应商影响。
  • 运维前置:虽然容器化降低了门槛,但邮件协议的复杂性意味着用户仍需要理解 SPF/DKIM/DMARC 的基本概念,否则容易踩坑。
  • 可改进点:例如增加内置的 IP 信誉监控、更细粒度的发送限速策略、以及模板的版本管理与 A/B 测试能力。

LAST💡 总结与行业启发SUMMARY

BillionMail 给我们最大的启发,可能不在于它实现了多少功能,而在于它选择了一个被 SaaS 和传统自建方案夹击的中间地带,用一体化的产品思维去重新组织复杂度。

它把「邮件服务器」这个传统上属于运维领域的硬骨头,和「营销增长」这个属于业务领域的软需求缝合在一起:Go(GGoFrame v2) 保证了后端的企业级可维护性,Vue3 + Pinia 撑起了现代交互,容器化 + supervisor + fail2ban 把运维封装进黑盒,而 AI 和 ACME 自动化则把两端的门槛同时拉低。

对于正在做开源项目的开发者,它的三点经验值得借鉴:

  1. 领域建模要深:把 DSN、relay、退信率这些底层概念抽象成强类型结构,才支撑得起真正的数据运营,而不是只做个「发送按钮」。
  2. 自动化是产品的一部分:ACME、DNS 校验、fail2ban 这些看似「运维」的东西,其实是用户体验的关键。
  3. AI 要内建而非外挂:把供应商管理、token 统计、会话记录做成系统能力,AI 才从噱头变成生产力。

如果你正好被第三方邮件服务的账单和黑箱数据困扰,或者想给团队搭一套真正握在自己手里的邮件基础设施,BillionMail 值得放进你的候选清单里,花 8 分钟跑一个试试看。 ✨

看完不过瘾,那就自己发一篇吧!
© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
相关推荐
评论 抢沙发

请登录后发表评论

    暂无评论内容