Mailpit 与 MailHog:本地工具 vs Mailexam 团队协作¶
MailHog 和 Mailpit 是常用的本地外发邮件拦截工具。它们在您的机器或 Docker 中运行,在 localhost 上接收 SMTP,并在 Web 界面中展示邮件。对独自在笔记本上开发的工程师来说,这种方式方便且免费。
Mailexam 解决同样的核心问题——用测试 SMTP 收件箱代替真实投递——但以面向协作的云服务形式提供:团队共享收件箱、CI/CD 与 staging 无需隧道即可访问、API 支持自动化测试。适合分布式团队,包括跨时区、跨国家的国际协作场景。
概览¶
| MailHog | Mailpit | Mailexam | |
|---|---|---|---|
| 模式 | 本地进程 / 容器 | 本地进程 / 容器 | 云 SaaS |
| 适用对象 | 单机上的单个开发者 | 单机上的单个开发者 | 团队、CI/CD、QA |
| 共享收件箱 | 否 — 收件箱绑定在该主机 | 否 — 收件箱绑定在该主机 | 是 — 一个项目,共同访问 |
| CI/CD 访问 | 仅当 runner 在同一台机器 | 同上 | 是 — 任意 runner 均可 SMTP/API |
| 同事访问 | SSH、屏幕共享、端口转发 | 同上 | 浏览器与 API 凭据 |
| 账户与权限 | 无 | 无 | 账户、项目、API 令牌 |
| 重启后历史 | 默认丢失 | 可本地配置 | 云端保留 |
| 自动化测试 API | 有限(MailHog)/ 有(Mailpit) | REST API | REST API |
并非「谁更好」
Mailpit 和 MailHog 非常适合在笔记本上个人调试。当多人或远程系统(CI、staging、异地同事)需要看到同一封邮件、且不想折腾网络时,应选择 Mailexam。
Mailpit 与 MailHog 适合谁¶
本地拦截器很好地覆盖 「只有我一人写代码、在旁边看邮件」 的场景:
- 通过
docker run或二进制快速启动,无需注册; - 数据完全留在本机;
- 不依赖外部服务;
- 足够在本机验证模板、排版或 SMTP 集成。
本质上它们是单用户方案:收件箱存在于进程所在的主机。除非您转发端口、配置 VPN 并告知地址,否则其他人无法打开您的 Mailpit。
本地工具的天花板¶
当项目出现团队协作时,常见问题如下:
1. 「邮件在我的笔记本上,QA 看不到」¶
开发者发出测试邮件 — 进入本地 Mailpit。另一办公室(或另一大洲)的测试人员无法打开同一收件箱:他们的 localhost 不是您的机器。截图、会议和「把邮件链接贴到 Slack」成了常态。
2. CI/CD 与共享 runner¶
流水线将邮件发往 127.0.0.1:1025。在共享 CI runner(GitLab、GitHub Actions、Jenkins)上,应用旁边没有您的 Mailpit — 或它属于其他 job,构建结束后被清空。要在 CI 中断言邮件内容,往往不得不在同一 job 中启动 Mailpit、解析其 API,或 mock 发送 — 都会增加流水线复杂度。
3. Staging 与多环境¶
Staging、预览环境与本地开发是三台不同主机、三个不同本地收件箱(若已配置)。QA 没有统一入口查看「项目的全部测试邮件」,跨环境对比也更困难。
4. 国际与分布式团队¶
团队分布在莫斯科、柏林、新加坡时,「通过 VPN 连我的 localhost」无法扩展:时区、企业防火墙、安全策略。需要统一地址与统一历史,通过浏览器访问,而无需向开发者笔记本做端口转发。
5. 入职与统一配置¶
每位新开发者各自启动 Mailpit:docker-compose 端口不同、镜像版本不同、README 里漏写服务。使用 Mailexam 时,欢迎邮件中的一套 SMTP 参数即可 — 复制到 .env 与 CI 密钥;所有人共享同一收件箱。
6. 无法划分访问权限¶
本地拦截器没有「仅 QA」或「仅 CI 令牌」的概念。要么能访问机器/容器,要么不能。产品团队常需要独立项目(feature、staging、demo)与API 令牌用于自动化测试 — 而无需服务器 root 权限。
Mailexam 如何支持团队协作¶
Mailexam 是带控制台与 API 的云端测试 SMTP 收件箱。邮件不会投递给真实收件人,而是进入您账户中的项目。
对团队的价值:
| 任务 | Mailexam 方案 |
|---|---|
| 共享收件箱 | 一个项目、一套 SMTP 凭据;有权限的人可在控制台看到相同邮件 |
| CI/CD | Runner 发往 {login}.mailexam.cn — 流水线(API)与浏览器均可访问 |
| Staging / 预览 | 服务器使用相同凭据 — QA 无需登录服务器即可验信 |
| 自动化测试 | REST API:列表、正文、附件 — 全团队统一流程 |
| 多环境 | 独立项目或项目内邮箱(见 API) |
| 分布式团队 | 任意地点 HTTPS 控制台;无需 VPN 到开发者笔记本 |
典型流程:
- 负责人或 DevOps 创建项目(或使用注册时的项目)。
- 将 SMTP 登录名、密码、主机分发给团队并写入 CI 密钥。
- 开发者、QA 与流水线向同一 sandbox 发信。
- QA 在控制台查看;CI 通过 API 断言内容。
连接说明见集成示例。
如何选择¶
| 场景 | 建议 |
|---|---|
| 单人开发、离线、全在笔记本 | Mailpit / MailHog 或 Mailexam(需联网) |
| 两人及以上、共享 QA | Mailexam |
| 共享 runner 上的邮件 CI 测试 | Mailexam |
| Staging + 开发 + CI — 邮件单一事实来源 | Mailexam |
| 远程或国际团队 | Mailexam |
| 严格要求全部 on-prem、不上云 | Mailpit / MailHog(或自建同类方案) |
从 Mailpit 或 MailHog 迁移¶
发送代码无需修改 — 只需更新 .env、docker-compose 与 CI/CD 中的 SMTP 参数。
迁移前(本地)¶
端口可能是 1025(MailHog)或 1025 / 587(Mailpit)。通常无需认证。
迁移后(Mailexam)¶
MAIL_HOST=您的登录名.mailexam.cn
MAIL_PORT=587
MAIL_USERNAME=您的登录名
MAIL_PASSWORD=您的密码
MAIL_ENCRYPTION=tls
Docker Compose
团队开发可从 docker-compose.yml 中移除 mailpit 服务 — 应用直接连接 Mailexam。仅对刻意完全离线工作的开发者保留本地 Mailpit。
自动化测试¶
若测试曾调用 Mailpit API(如 /api/v1/messages),请改用 Mailexam API — 典型流程:SMTP 发送 → 等待 1–5 秒 → 按主题或收件人过滤 GET /api/v1/email。
更多¶
- 本地 Mailpit/MailHog 的历史不会迁移 — Mailexam 从新的共享收件箱开始。
- Mailexam 不使用 Cookie 追踪 — 见我们为什么不使用 Cookie。
- 已在使用 Mailtrap?另见从 Mailtrap 迁移到 Mailexam。
需要为团队配置帮助?请联系 support@mailexam.cn。