MailHog 本地邮件测试服务器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,在 AI 助手中安装 @user_3c6cb52e/mailhog-smtp-testing-server-with-web-ui-and-api。
技能介绍
要解决的问题
在开发环境里调试邮件,最麻烦的不是"邮件写不出来",而是"邮件发出去之后去了哪里"。本地逻辑一切正常,smtp.send() 也没报错,但真实收件人可能收到一封格式错乱的邮件,或者根本没收到。直接用真实 SMTP(比如公司邮箱或 SendGrid)测试,风险是收件人收到脏数据,验证成本也高;用 mock 函数又绕过了真实的序列化、MIME 组装和 SMTP 握手,等于没测到关键路径。
MailHog 把这一步变成"本地跑一个假的 SMTP 服务器",让代码以为在正常发信,实际消息全被截留在本地,等待检查。
它是怎么工作的
- 本地 SMTP 接收:MailHog 在本地监听一个 SMTP 端口,应用只需把
MAIL_HOST/SMTP_HOST指向它,其余发送逻辑完全不变,SMTP 会话照常进行。 - Web 界面查看:消息被完整捕获后,可在浏览器 UI 中按
To、From、Subject 检索,展开查看 MIME 原文、HTML 渲染结果和附件,方便核对模板渲染。 - JSON API 自动化:通过 API 拉取消息列表和单条消息内容,可以把断言写进测试用例里,实现自动化验证,而不是靠肉眼看界面。
- 适用场景:调试事务性邮件(注册确认、密码重置、订单通知)、验证模板在真实数据下是否错位、测试重试与退信行为,全程不需要真实收件人。
适用边界与注意点
- 仅用于开发与测试:它不是邮件投递服务,没有送达率、SPF/DKIM 签名校验、真实退信处理,绝不能用于生产环境。
- 发送行为与真实服务有差异:它不做队列、不做重试、不做真实投递,无法模拟 Gmail、Outlook 的入站过滤规则,渲染结果可能与收件箱实际情况不同。
- 历史消息非持久化:捕获的消息保存在内存中,重启后清空,不要当成审计或归档系统。
- 上游能力以官方文档为准:Docker 部署方式、Go 构建要求(需 Go 1.4+)等细节,建议参考 MailHog 上游 README 和仓库文档,不要只依赖本技能内的说明。
使用场景
- 在本地开发注册流程时,需要验证验证码邮件的 HTML 模板在真实数据下是否错位,避免消息发给真实用户前才发现问题。
- 编写自动化测试用例时,要断言密码重置邮件的收件人、主题和正文内容,通过 JSON API 拉取消息做断言而非人工看界面。
- 调试订单通知邮件时,需要查看 MIME 原文和附件内容,确认序列化后的邮件结构是否符合后端预期。
- 迭代邮件模板后,要在开发环境快速回看多条历史发送记录,核对不同模板版本的渲染差异。
适合人员
- 后端工程师:需要为注册、找回密码等流程编写邮件发送代码,并验证消息内容符合预期。
- 前端或全栈工程师:负责邮件模板渲染,需要查看 HTML 邮件在真实数据下的显示效果再交付。
- 测试工程师:要编写邮件相关自动化测试,通过 API 断言消息内容而不依赖真实收件人。
- 平台工程师:在 CI 环境搭建邮件捕获服务,让团队在开发测试阶段不触碰真实邮箱。