MailHog邮件沙盒,本地邮件测试!cpolar内网穿透实验室第797个成功挑战

软件名称:MailHog

操作系统支持

  • 基础系统:Windows、macOS、Linux(Ubuntu/CentOS 等);
  • 特殊设备:极空间、群晖等 NAS 设备(支持 Docker 即可);
  • 部署方式兼容:Docker、Docker Compose、二进制文件、Homebrew(macOS)。

软件介绍

MailHog 是用 Go 编写的开源工具,说白了就是给开发者做的 "邮件沙盒"------ 启动后会监听 SMTP 端口(默认 1025),应用连接它发邮件时,不会真的把邮件发出去,而是全部捕获下来,再通过 Web 界面(默认 8025 端口)展示邮件的发件人、收件人、正文(HTML / 纯文本)、附件甚至原始邮件头。它不用配账号密码,不用连外网,重启后数据自动清空,专门解决开发 / 测试阶段邮件调试的痛点,不过有个前提:它只适合测试,不能替代 SendGrid、Amazon SES 这些生产级邮件服务。

MailHog 的出色功能
  1. 邮件 "拦截 + 可视化" 双 buff:不管是 Python 脚本、PHP 应用还是 telnet 手动发的邮件,只要指向 MailHog 的 SMTP 端口,全都会被 "扣下",Web 界面里能直接看邮件的最终样式,包括 HTML 排版、图片、附件,不用再对着日志里的乱码猜内容;
  2. 零配置开箱即用:不用注册任何账号,不用申请 API Key,Docker 一条命令就能跑起来,Windows 下直接双击 exe 文件就能启动,对新手友好,实测从下载到启动最多 5 分钟;
  3. 跨平台无适配成本:不管是 Windows 笔记本、Mac 工作站,还是极空间 NAS,只要能装 Docker 或跑二进制文件,就能用,不用为不同系统单独改配置。
实用场景
场景 1:后端开发用户注册邮件
  • 痛点:开发 "注册成功提醒邮件" 时,要是直接连真实 SMTP,测试时填的测试账号可能混进真实用户邮箱,不小心发出去会被用户投诉,而且改完模板后,得反复发邮件到自己的私人邮箱看样式,来回切换很麻烦;
  • 爽点:把应用的 SMTP 配置指向本地 MailHog,随便填多少个 "测试邮箱",邮件都只存在本地,改完模板后刷新 Web 界面就能看到最终效果,附件漏加、排版错位一眼就能发现,用了两周下来,光调试模板的时间就省了一半。
场景 2:NAS 部署应用测试通知邮件
  • 痛点:在极空间 NAS 上部署了个人记账应用,想加 "月度账单邮件通知" 功能,NAS 在内网里,测试邮件只能在 NAS 本地看,手机或公司电脑没法核对,总不能每次都跑回家看结果;
  • 爽点:在 NAS 上用 Docker 启动 MailHog,再配合 cpolar 做内网穿透,手机连 4G 就能访问 MailHog 的 Web 界面,随时看测试邮件,不用折腾公网 IP,也不用把 NAS 暴露在危险的公网环境里。
cpolar内网穿透技术带来的便利

用 MailHog 的核心问题是 "本地能用,但外人看不了",而 cpolar 刚好补了这个缺口,而且全程不用写一行代码,纯配置就能搞定:

  1. 跨设备访问无门槛:开发时在公司电脑装了 MailHog,下班回家想继续调试,不用远程控制公司电脑,只要 cpolar 把 MailHog 的 Web 端口映射到公网,手机、家里的电脑输入 cpolar 生成的地址,就能直接看测试邮件,不用局限在局域网里;
  2. 团队协作更顺畅:改完邮件模板后,不用截图、录屏发给产品 / 测试同事,直接把 cpolar 的公网地址发过去,他们自己就能打开看邮件样式、核对文案,不用反复沟通 "是不是这个效果";
  3. 固定地址不用反复改:最初用 cpolar 的随机域名,每次重启隧道地址就变,得重新发链接,后来配置了 cpolar 的二级子域名,地址固定下来,不管重启多少次 MailHog 或 cpolar,同事们用同一个地址就能访问,省了反复同步地址的麻烦;
  4. 部署成本几乎为零:cpolar 的一键脚本安装只要几十秒,不用买服务器、不用备案,普通开发者也能搞定,实测在极空间 NAS 上装 cpolar+MailHog,全程不到 20 分钟,而且基础功能免费,对小团队 / 个人来说完全够用;
  5. 安全不暴露内网:cpolar 的穿透是加密的,只会把 MailHog 的 Web 端口映射出去,不会让整个内网暴露在公网,比直接端口映射安全得多,不用担心里程碑被攻击的风险。
总结

MailHog 不是什么 "高大上" 的工具,但胜在精准解决了开发者测试邮件的核心痛点 ------ 零成本、不发真实邮件、可视化调试,就像给邮件功能装了个 "防撞护栏",不用怕测试阶段出纰漏。而 cpolar 则是给这个 "护栏" 加了个 "远程入口",解决了内网工具没法跨设备、跨地点使用的问题。

两者搭配下来,不管是个人开发者在 NAS 上折腾应用,还是小团队开发邮件功能,都能做到 "调试不踩坑、协作不费劲"。不过要注意,MailHog 只适合测试,上线前还是要切回真实的生产级邮件服务;cpolar 的免费版随机域名够用,要是团队长期用,花点小钱弄个固定二级子域名更顺手。

好用就是软件的第一标准,恰巧MailHog+cpolar符合了这个标准。解决专业问题,有需要的小伙伴去按照教程安装吧!

本文将手把手教你:

  • 快速部署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/认证(可选),但通常开发环境无需开启

开源信息

MailHog = 本地SMTP服务器 + 邮件收件箱Web UI,专为开发者打造的"邮件沙盒"。

2.前提条件

2.1ssh远程连接到极空间

  • 开启【SSH 服务】
  • 使用终端(Windows PowerShell / Mac Terminal)登录:
shell 复制代码
ssh root@IP

2.2验证docker是否开启

使用命令:

shell 复制代码
docker -v 
systemctl status -v

3.在各种平台上部署MailHog

3.1 Windows部署MailHog

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

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

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

3.2 Linux部署MailHog

以下是Linux部署MailHog的方法:

shell 复制代码
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:

shell 复制代码
~/go/bin/MailHog

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

3.3 MacOS部署MailHog

苹果用户可以打开终端并运行以下命令:

shell 复制代码
brew install mailhog

这将在macOS上安装MailHog。接下来,你可以用以下命令启动:

shell 复制代码
mailhog

如果你想让MailHog在登录时自动启动并作为后台服务运行,可以运行以下命令:

shell 复制代码
brew services start mailhog

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

3.4 Docker部署MailHog

请确保您的计算机上安装了Docker。然后,运行以下命令即可直接从Docker Hub启动MailHog:

shell 复制代码
docker run -d -p 1025:1025 -p 7066:8025 mailhog/mailhog

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

3.5 Docker Compose部署MailHog

创建并编辑 docker-compose.yml文件:

shell 复制代码
version: "3"
services:
mailhog:
image: mailhog/mailhog:latest
restart: always
ports:
- 1025:1025
- 8025:8025

启动容器:

shell 复制代码
docker-compose up -d

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

4.使用MailHog测试本地电子邮件

4.1 用Python发SMTP

shell 复制代码
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手动发邮件

shell 复制代码
telnet 192.168.50.213 1025

然后输入以下内容(每行回车):

shell 复制代码
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上):

shell 复制代码
apt update && apt install swaks -y

然后发送:

shell 复制代码
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步骤:

使用一键脚本安装命令:

shell 复制代码
sudo curl https://get.cpolar.sh | sh

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

shell 复制代码
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

点击更新

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

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

总结

邮件功能虽小,却是现代应用不可或缺的一环。然而,在开发和测试阶段直接对接真实SMTP服务,不仅流程繁琐,还存在误发、泄露、配额限制等风险。

MailHog的出现,完美解决了这一痛点。它以极简的方式提供了一个本地SMTP服务器 + 可视化邮件收件箱,让你在完全隔离的环境中自由调试邮件逻辑------无需API Key、不依赖网络、零成本、零风险。

通过Docker一行命令即可部署,配合nc、Python或应用自身配置,轻松完成端到端测试。若需远程访问,还可结合cpolar等内网穿透工具,实现跨设备协作,进一步提升开发效率。

无论你是前端、后端、全栈开发者,还是DevOps工程师,MailHog都值得加入你的本地开发工具箱。

从此,邮件调试不再"盲人摸象",一切尽在掌控之中。

相关推荐
咖啡星人k1 小时前
AI Agent编程模式深度解析:从任务规划到自动调试的技术实现
人工智能
月疯1 小时前
PyTorch 中定义了一个 LeakyReLU 激活函数层
人工智能·pytorch·python
深蓝电商API1 小时前
AI驱动的自适应爬虫框架设计思路全解析
人工智能·爬虫
阿里云云原生1 小时前
AI Agent 进入生产深水区:如何破解 Token 成本黑洞与排障难题?
人工智能·阿里云·agent·云监控
TheRouter1 小时前
AI Agent 的并发调度工程实战:任务队列、并发限制与 Fan-out/Fan-in 模式
人工智能
nuo5342022 小时前
人工智能生成内容 (AIGC) 期末复习资料
人工智能·aigc
zhangfeng11332 小时前
DNN Transformer SNN 这几个模型的对比和应用场景 前景
人工智能·transformer·dnn
V搜xhliang02462 小时前
告别SPSS卡顿:用AI智能体自动跑回归、生存曲线、生成方法学段落
运维·人工智能·数据挖掘·回归·机器人·自动化·飞书
Triv20252 小时前
边缘计算新选择:Kvaser Edge 搭载容器化 OS,四路隔离 CAN-FD + Wi-Fi 6 + GNSS/IMU 全解析
人工智能·边缘计算·远程管理·socketcan·linux容器·ip67、gnss、imu·can-fd