调试邮件功能怕误发真用户?我用MailHog搭了个本地邮件沙盒,零成本随时查看
前言
做 Web 应用开发,邮件功能几乎是标配——注册验证码、密码找回、订单通知,写的时候都得测。但测这件事本身就很尴尬:接真实 SMTP 吧,怕代码 Bug 误发给真实用户, Reputation 受损;不测吧,怎么知道邮件能不能正常收到、样式对不对、标题有没有乱码。
行业内有个普遍做法是用日志猜——发出去之后去服务器翻日志,看有没有错误。这种方式效率低不说,日志里出来的信息也很有限,邮件正文有没有错乱、附件有没有带上去,根本看不出来。
后来找到 MailHog,算是把这个问题彻底解决了。它本质上是一个本地 SMTP 模拟器,代码里把邮件服务地址指向它,它就接住所有发过来的邮件,但不会真的发出去,同时给你一个 Web 界面实时查看每一封邮件的内容。接收到什么、什么时候发的、格式对不对,打开网页一目了然。Docker 一条命令就跑起来,不依赖任何外部服务,手机和电脑都能访问。用了一段时间下来,邮件功能调试从"提心吊胆靠猜"变成了"随时打开网页直接看",效率提升明显。
本文将手把手教你:
- 快速部署MailHog
- 配置应用连接本地SMTP
- 发送测试邮件并验证效果
- 解决常见问题(如端口冲突、拉取镜像失败等)
从此,邮件功能开发调试,再也不用提心吊胆!

1.什么是MailHog?
核心功能
模拟SMTP服务器
- MailHog启动后会监听一个SMTP端口(默认1025),你的应用可以像连接真实邮件服务器一样连接它,调用标准SMTP协议发信。
Web界面实时查看邮件
- 所有“发送”的邮件都会被MailHog捕获,并展示在一个简洁的Web界面中(默认端口8025),包括:发件人、收件人、主题、邮件正文(HTML / 纯文本)、附件、原始邮件头(Headers)
无需配置、零依赖
- 开箱即用,不需要账号、密码、API Key或外部服务,完全离线运行。
支持多种部署方式
- 可通过Docker、二进制文件、Homebrew(macOS)等方式一键启动。
典型使用场景
- 开发阶段:测试用户注册、找回密码、通知邮件等功能
- CI/CD流水线:在自动化测试中验证邮件内容是否正确
- 演示环境:向客户展示邮件功能,但不实际发送
- 安全合规:避免因测试误发邮件到真实用户邮箱
- 注意:MailHog不是生产级邮件服务器!它仅用于开发和测试,不能替代 SendGrid、Postfix、Amazon SES等真实邮件服务。
安全与隐私
- 所有邮件仅存储在本地内存中(默认),重启即清空
- 不连接外网,无数据泄露风险
- 支持TLS/认证(可选),但通常开发环境无需开启
开源信息
- GitHub:https://github.com/mailhog/MailHog
- License:MIT(免费商用)
- 语言:Go编写,跨平台支持(Windows/macOS/Linux/ARM)
MailHog = 本地SMTP服务器 + 邮件收件箱Web UI,专为开发者打造的“邮件沙盒”。
2.前提条件
2.1ssh远程连接到极空间
- 开启【SSH 服务】
- 使用终端(Windows PowerShell / Mac Terminal)登录:
ssh root@IP

2.2验证docker是否开启
使用命令:
docker -v
systemctl status -v

3.在各种平台上部署MailHog
3.1 Windows部署MailHog
首先,前往GitHub上的MailHog 发布页面,下载适用于Windows的最新稳定版本。下载MailHog 后,可以原样运行,无需任何外部依赖。

由于Windows版MailHog是一个简单的自可执行程序,因此只需运行下载的 .exe 文件即可。下面是MailHog在Windows 10上的外观。

现在,您可以在 浏览器中访问localhost:8025或127.0.0.1:8025,查看MailHog网页。

3.2 Linux部署MailHog
以下是Linux部署MailHog的方法:
sudo apt-get -y install golang-go
sudo apt-get install git
go install github.com/mailhog/MailHog
接下来,你可以在终端中直接运行MailHog可执行文件来启动服务。具体路径取决于你的系统和Go环境配置。
例如,在Ubuntu系统中,如果你使用的是默认的Go工作区设置,编译后的可执行文件通常位于 ~/go/bin/ 目录下。你可以通过以下命令启动MailHog:
~/go/bin/MailHog
现在,您可以在 浏览器中访问ip:8025,查看MailHog网页。
3.3 MacOS部署MailHog
苹果用户可以打开终端并运行以下命令:
brew install mailhog
这将在macOS上安装MailHog。接下来,你可以用以下命令启动:
mailhog
如果你想让MailHog在登录时自动启动并作为后台服务运行,可以运行以下命令:
brew services start mailhog
现在,您可以在 浏览器中访问localhost:8025或127.0.0.1:8025,查看MailHog网页。
3.4 Docker部署MailHog
请确保您的计算机上安装了Docker。然后,运行以下命令即可直接从Docker Hub启动MailHog:
docker run -d -p 1025:1025 -p 7066:8025 mailhog/mailhog

现在,您可以在 浏览器中访问ip:7066,查看MailHog网页。

3.5 Docker Compose部署MailHog
创建并编辑 docker-compose.yml文件:
version: "3"
services:
mailhog:
image: mailhog/mailhog:latest
restart: always
ports:
- 1025:1025
- 8025:8025
启动容器:
docker-compose up -d
现在,您可以在 浏览器中访问ip:7066,查看MailHog网页。
4.使用MailHog测试本地电子邮件
4.1 用Python发SMTP
python3 -c "
import smtplib
s = smtplib.SMTP('192.168.50.213', 1025)
s.sendmail('a@test.com', 'b@mailhog.local', 'Subject: Test\n\nHi')
s.quit()
"

您可以访问MailHog Web UI来验证电子邮件是否成功发送。

4.2 使用telnet手动发邮件
telnet 192.168.50.213 1025
然后输入以下内容(每行回车):
EHLO localhost
MAIL FROM:<kinsta@mailhog.local>
RCPT TO:<test@mailhog.local>
DATA
From: Salman <kinsta@mailhog.local>
To: Test <test@mailhog.local>
Subject: Hello, MailHog!
Hey there,
Missing you pig time.
Hogs & Kisses,
Salman
.
QUIT

您可以访问MailHog Web UI来验证电子邮件是否成功发送。

4.3 用swaks
强大的SMTP测试工具,先安装swaks(在Debian/Ubuntu上):
apt update && apt install swaks -y
然后发送:
swaks --to test@mailhog.local \
--from kinsta@mailhog.local \
--server 192.168.50.213:1025 \
--body "Hey there, Missing you pig time." \
--header "Subject: Hello, ceshichenggong!"

您可以访问MailHog Web UI来验证电子邮件是否成功发送。

4.4 从另一个Docker容器
比如PHP/Node.js应用。
如果你正在开发一个Web应用,只需配置它的SMTP设置为:
- Host: 192.168.50.213
- Port: 1025
- No TLS / No Auth
所有邮件都会被捕获到MailHog。
在本地开发中,MailHog是无数开发者调试邮件功能的“秘密武器”——它能捕获所有SMTP邮件并在Web界面中直观展示,安全又高效。然而,它的默认访问方式仅限于本机(localhost:8025),一旦你需要:
- 从手机或其他设备查看测试邮件
- 让远程团队成员验证邮件模板
- 在公网回调场景中接收通知
……就会遇到一个现实问题:如何把运行在内网的MailHog安全地暴露到公网?
这时,cpolar就成了完美的解决方案。
5.安装cpolar实现随时随地开发
5.1 什么是cpolar?
cpolar是一款安全高效的内网穿透工具,无需公网IP或复杂配置,只需一条命令,即可将本地服务器、Web服务或任意端口映射到公网,让你随时随地远程访问内网应用,特别适合开发调试、远程运维和应急部署等场景。
5.2 部署cpolar
cpolar可以将你本地电脑中的服务(如SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。
❤️以下是安装cpolar步骤:
使用一键脚本安装命令:
sudo curl https://get.cpolar.sh | sh

安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)
sudo systemctl status cpolar

Cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机IP加9200端口即:【http://ip:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:
打开浏览器访问本地9200端口,使用cpolar账户密码登录即可,登录后即可对隧道进行管理。

6.配置公网地址
登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道:
- 隧道名称:可自定义,本例使用了:mailhog,注意不要与已有的隧道名称重复
- 协议:http
- 本地地址:7066
- 域名类型:随机域名
- 地区:选择China Top

打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用地址访问。

访问成功。

7.保留固定公网地址
使用cpolar为其配置二级子域名,该地址为固定地址,不会随机变化。

点击左侧的预留,选择保留二级子域名,地区选择china Top,然后设置一个二级子域名名称,我使用的是mailhog,大家可以自定义。填写备注信息,点击保留。

登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道,点击右侧的编辑。

修改隧道信息,将保留成功的二级子域名配置到隧道中
- 域名类型:选择二级子域名
- Sub Domain:填写保留成功的二级子域名
- 地区: China Top
点击更新

更新完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的二级子域名名称。

最后,我们使用固定的公网地址在任意设备的浏览器中访问,可以看到成功访问的页面,这样一个永久不会变化的二级子域名公网网址即设置好了。

总结
MailHog 解决了邮件测试环节中最核心的一个问题——隔离。它把"可能误发"这个风险彻底切掉,开发者怎么写、怎么测都行,反正邮件只存在本地内存里,重启就清,不会有任何外部影响。
用下来最顺手的地方有几个:Docker 起起来最快,基本不用配置,Linux、Windows、Mac 都能跑;Web 界面直接看邮件正文、附件、原始 Headers,调试体验比翻日志好太多;配合 cpolar 穿透之后,手机和电脑都能打开看,远程演示的时候不用接同一局域网。开发邮件功能这件事,从"心理负担很重"变成了"随时想测就测",这个转变是质的。
如果你现在还在靠日志或者真实 SMTP 测试邮件功能,花 5 分钟装一下 MailHog,试一次就知道这个工具解决的是真问题,不是伪需求。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)