ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

开源MailCheap自托管部署:用你自己的Amazon SES账号,免费搭一套Newsletter系统

开源MailCheap自托管部署:用你自己的Amazon SES账号,免费搭一套Newsletter系统

【免费下载链接】mailcheap

Newsletters where you pay for the emails you send, not for dormant subscribers, at a fraction of the price of beehiiv and the like. Open source: self-host it, or use mailcheap.ai.

项目地址:https://gitcode.com/gh_mirrors/mai/mailcheap
点击查看免费下载

MailCheap 是一个开源的 Newsletter(邮件通讯)应用:写内容、发给订阅者、自动发布成可被搜索引擎收录的独立网站。自托管部署后,发送走你自己的Amazon SES 账号,只按实际发出的邮件付费——比 beehiiv、Substack 这类"按订阅者收费"的平台便宜得多,代码还是完整开放的。

为什么值得自己搭一套?

传统平台的痛点是:你为"睡着的"订阅者付费。而 MailCheap 的自托管模式是——

  • 💸成本极低:SES 约 $0.10–0.16 / 1000 封。1 万读者 × 每月 4 期 ≈ 4 万封,一个月只要$4–6
  • 🔓完全开源(AGPL-3.0):整套应用就是这个仓库,README.md 本身就是自托管指南
  • 🚫没有套餐、没有上限:自托管模式下不限邮件数、不限订阅读数(每个账号最多 3 个 Newsletter)
  • 🛡️送达保护内置:新域名自动预热、列表自动清理、退订/投诉超阈值自动暂停

部署前需要准备什么

服务用途费用
MongoDB Atlas存订阅者、活动、统计免费档够用
Amazon SES实际发送邮件$0.10–0.16 / 1000 封
Upstash QStash后台批量发送与定时任务免费档起步
Node.js 22+ 主机运行应用Vercel 免费档即可
Resend(可选)发送登录验证码免费版够用
Redis / S3 或 Blob(可选)跨实例限流 / 编辑器图片上传免费档够用

所有可选配置在 .env.example 里都有逐项说明。下面按 6 步完成部署,全程约 1 小时(大部分时间在等 DNS 生效和 SES 审批)。

快速上手:本地先跑起来

本地开发只需 MongoDB(可用 Docker 起一个mongodb://127.0.0.1:27017/mailcheap)和几个核心变量:

MONGODB_URI=mongodb://127.0.0.1:27017/mailcheap BETTER_AUTH_SECRET=<openssl rand -base64 48> SUPPRESSION_HASH_KEY=<另一个随机值,同上生成> ADMIN_EMAILS=you@example.com EMAIL_FROM=MailCheap <login@example.com>
git clone https://gitcode.com/gh_mirrors/mai/mailcheap && cd mailcheap npm install cp .env.example .env.local npm run dev

本地跑起来时登录验证码会直接打印在服务器控制台([signin] Code for ...),开发阶段不用配置任何邮件服务。

关键一步:Amazon SES 配置详解

SES 部分建议用一个全新的 AWS 账号,因为 SES 的信誉和发送额度是按账号隔离的,别让 Newsletter 影响你其它业务的邮件。

  1. 申请生产访问权限:新账号默认处于沙盒模式(每天限 200 封且只能发给已验证地址)。在Account dashboard → Request production access中选择 Marketing,说明读者是主动订阅的、退订和投诉会自动抑制,AWS 通常一天内回复。
  2. 创建 SNS 事件主题,并切换为签名版本 2(SHA256):
aws sns set-topic-attributes \ --topic-arn <topic-arn> \ --attribute-name SignatureVersion \ --attribute-value 2

然后创建 HTTPS 订阅,endpoint 填https://<你的域名>/api/webhooks/ses。应用部署完成后会自动确认订阅,送达/退信/投诉事件都会推到这里。 3.创建专用 IAM 用户:只授予 MailCheap 需要的 SES 权限(发送邮件、管理 tenant / 发信域名 / 配置集),并生成 Access Key。权限策略原文见 README.md 的 "Amazon SES" 小节。 4.添加环境变量后重新部署(完整定义见 .env.example):

SES_REGION=us-east-1 SES_ACCESS_KEY_ID=<你的 key> SES_SECRET_ACCESS_KEY=<你的 secret> SES_AWS_ACCOUNT_ID=<12 位 AWS 账号 ID> SES_SNS_TOPIC_ARN=<主题 ARN>

MailCheap 会为每个账号自动创建独立的 SES tenant(独立域名、独立抑制列表、独立暂停开关),互不牵连。所有 AWS 调用都集中在 lib/ses.js 一个文件里——想换成别的邮件提供商,只需要动这一层。

💡 如果不用 Resend,登录验证码也会通过 SES 发送,那么EMAIL_FROM所在域名需要先在 AWS 里完成验证(Identities → Create identity → Domain,用 Easy DKIM);沙盒模式下登录邮箱本身也要先验证。

后台发送:接入 Upstash QStash

批量发送和定时发送都由 QStash 调度:在 Upstash 控制台复制QSTASH_TOKEN和两个签名密钥,填入后重新部署。QStash 会回调APP_URL/api/jobs/...逐批发信,且每批任务都会校验 QStash 签名,防止伪造。本地调试可运行npx @upstash/qstash-cli dev拿到本地可用的配置。

开启发送:域名验证与第一封邮件

  1. 在Domains页面添加发信域名,强烈建议用子域名(如mail.example.com),这样即使某周发送表现差,也不牵连主域名的邮件。
  2. 按页面提示添加 DKIM、return path、DMARC 记录,点Check now逐项验证。
  3. 创建 Newsletter:发件地址必须在已验证域名下,页脚必须填真实邮政地址(反垃圾邮件法规要求)。
  4. 设置SENDING_ENABLED=true并重新部署——这是总开关,没打开时一封读者邮件都不会发出,登录验证码和告警不受影响。
  5. 先发给自己测试,再正式发送。首次发送给新联系人时,系统会自动先发 5% 做预热,3 小时后若退信/投诉率健康再发其余的。

部署完成后的体验

打开总览页,发送量、送达率、打开率、点击率、退信率、投诉率一屏看全;Review步骤会在发送前自动检查主题、预览文本、退订链接、Gmail 的 100 KB 截断限制、邮政地址和发件人;还可以从 beehiiv、Substack、Mailchimp、Ghost 等平台的 CSV 直接导入订阅读(保留状态和订阅日期)。每个 Newsletter 都会自动生成一个带订阅表单的独立网站:

内置保护机制同样重要:

  • 🧹列表清理(默认开启):连续多期未打开的读者会收到一封"你还想继续吗"确认邮件,不再打开则停止发送
  • 🧹导入清洗:自动剔除无效地址、拼写错误的域名(如 gmial.com)、spam trap、角色地址、一次性邮箱和重复地址
  • ⏸️自动熔断:硬退信超过 2% 或投诉超过 0.08% 时暂停发送;超过 5% / 0.3% 直接封停该账号

发信最佳实践速查

实践说明
用子域名发送保护主域名信誉,坏一周不连累日常邮件
完整认证DKIM + SPF(自定义 return path)+ 根域名 DMARC
只发主动订阅的人永不导入购买或抓取的列表,保持 confirmed opt-in
新域名缓慢放量先发给最活跃的读者,几周后逐步扩大
盯紧投诉与退信投诉 < 0.1%、退信 < 2%,Gmail 垃圾率可在/admin连接 Google Postmaster Tools 每日读取
控制邮件体积保持 100 KB 以内,否则 Gmail 会截断并隐藏退订链接

写在最后

MailCheap 的自托管门槛不高:一个免费 MongoDB + 一个 SES 账号 + 一个免费档 Node 主机,约一小时就能上线;之后每月只为真正发出的邮件付几美元。核心源码结构在 lib/ 与 models/ 目录,完整的环境变量参考见 .env.example,逐步部署细节以 README.md 为准。

项目采用 AGPL-3.0 开源协议(见 LICENSE):自由使用、修改,若你修改后对外提供服务,则需开源你的改动版本。

【免费下载链接】mailcheap

Newsletters where you pay for the emails you send, not for dormant subscribers, at a fraction of the price of beehiiv and the like. Open source: self-host it, or use mailcheap.ai.

项目地址:https://gitcode.com/gh_mirrors/mai/mailcheap
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进