下载地址/官网:MailHog GitHub Releases
MailHog 是本地开发环境的测试邮箱。它会假装成一个 SMTP 服务器,接收 service-mail
发出来的邮件,并在网页里查看内容。这样调试邮件功能时不会把测试邮件发到真实用户邮箱。
端口和用途
| 端口 | 用途 |
|---|---|
| 1025 | SMTP 服务,应用把邮件发到这里 |
| 8025 | Web 页面和 API,用浏览器查看邮件 |
MailHog 默认没有认证,只适合放在本机或内网测试环境,绝不能暴露公网。
Windows 安装 MailHog
- 创建目录:
New-Item -ItemType Directory -Force -Path D:\apps\mailhog
- 下载 Windows x64 版本:
Invoke-WebRequest `
-Uri "https://github.com/mailhog/MailHog/releases/download/v1.0.1/MailHog_windows_amd64.exe" `
-OutFile "D:\apps\mailhog\MailHog.exe"
- 启动:
cd D:\apps\mailhog
.\MailHog.exe
- 看到 MailHog 输出 HTTP 和 SMTP 监听信息后,打开页面:
http://127.0.0.1:8025/
- 使用 Windows PowerShell 发送一封测试邮件:
Send-MailMessage `
-SmtpServer "127.0.0.1" `
-Port 1025 `
-From "dev@localhost" `
-To "test@example.com" `
-Subject "MailHog Test" `
-Body "Hello MailHog"
-
回到浏览器刷新,能看到这封邮件即为部署成功。
-
停止服务时,在启动窗口按
Ctrl+C。
Ubuntu 安装 MailHog
- 下载 Linux x64 版本:
curl -L \
https://github.com/mailhog/MailHog/releases/download/v1.0.1/MailHog_linux_amd64 \
-o MailHog_linux_amd64
- 安装到
/usr/local/bin:
sudo install -m 0755 MailHog_linux_amd64 /usr/local/bin/mailhog
- 先手动启动验证:
mailhog
- 另开一个终端,确认端口:
ss -lntp | grep -E '1025|8025'
-
回到第一个终端按
Ctrl+C停止。 -
创建 systemd 服务:
sudo useradd --system --home /var/lib/mailhog --shell /usr/sbin/nologin mailhog
sudo mkdir -p /var/lib/mailhog
sudo chown -R mailhog:mailhog /var/lib/mailhog
创建 /etc/systemd/system/mailhog.service:
sudo vim /etc/systemd/system/mailhog.service
写入:
[Unit]
Description=MailHog Test Mail Server
After=network.target
[Service]
User=mailhog
Group=mailhog
WorkingDirectory=/var/lib/mailhog
ExecStart=/usr/local/bin/mailhog
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
- 启动并设置开机自启:
sudo systemctl daemon-reload
sudo systemctl enable --now mailhog
- 查看状态:
sudo systemctl status mailhog --no-pager
sudo journalctl -u mailhog -f
- 访问页面:
http://服务器IP:8025/
Ubuntu 发送测试邮件
在 Ubuntu 上执行:
python3 - <<'PY'
import smtplib
from email.message import EmailMessage
msg = EmailMessage()
msg["From"] = "dev@localhost"
msg["To"] = "test@example.com"
msg["Subject"] = "MailHog Test"
msg.set_content("Hello MailHog")
with smtplib.SMTP("127.0.0.1", 1025, timeout=5) as smtp:
smtp.send_message(msg)
print("sent")
PY
执行成功后输出:
sent
然后刷新 MailHog 页面,或查询 API:
curl http://127.0.0.1:8025/api/v2/messages
macOS 安装 MailHog
先看 CPU 架构:
uname -m
Intel Mac 输出 x86_64,Apple Silicon 输出 arm64。
Intel Mac
- 下载并安装:
mkdir -p ~/apps/mailhog
curl -L \
https://github.com/mailhog/MailHog/releases/download/v1.0.1/MailHog_darwin_amd64 \
-o ~/apps/mailhog/MailHog
chmod +x ~/apps/mailhog/MailHog
- 启动:
~/apps/mailhog/MailHog
- 访问:
http://127.0.0.1:8025/
Apple Silicon
MailHog v1.0.1 官方 release 只有 darwin_amd64,没有 ARM64 包。可以在 Apple Silicon 上先安装 Rosetta,再运行这个 x86_64
二进制:
softwareupdate --install-rosetta --agree-to-license
然后按 Intel Mac 的方式下载 MailHog_darwin_amd64 并启动。
如果不想安装 Rosetta,macOS 这一项可以先跳过;Ubuntu 和 Windows 都有官方对应架构的二进制包。
macOS 发送测试邮件
python3 - <<'PY'
import smtplib
from email.message import EmailMessage
msg = EmailMessage()
msg["From"] = "dev@localhost"
msg["To"] = "test@example.com"
msg["Subject"] = "MailHog Test"
msg.set_content("Hello MailHog")
with smtplib.SMTP("127.0.0.1", 1025, timeout=5) as smtp:
smtp.send_message(msg)
print("sent")
PY
刷新 http://127.0.0.1:8025/ 看到邮件即可。
接入微服务
开发环境的 service-mail SMTP 配置如下:
spring:
mail:
host: 127.0.0.1
port: 1025
username: dev@localhost
password: ""
default-encoding: UTF-8
如果 MailHog 部署在另一台内网服务器上,把 host 改成那台服务器的内网 IP,端口仍然是 1025。业务服务所在机器必须能访问这个端口。
安全提醒
- MailHog 不做真实认证,不要暴露公网。
- 防火墙只允许可信开发网段访问 1025 和 8025。
- 测试邮件里不要放真实用户手机号、密码、密钥等敏感信息。
- 生产邮件应使用真实 SMTP 服务,不要使用 MailHog。
常见问题
页面打不开
确认 MailHog 进程还在,检查 8025 端口。远程服务器还要检查安全组、防火墙和是否只绑定了本机地址。
应用发送失败
先在应用所在机器测试 1025 端口是否连通:
nc -vz MailHog服务器IP 1025
Windows 可以用:
Test-NetConnection MailHog服务器IP -Port 1025
页面能看到乱码
检查邮件编码。service-mail 已配置 default-encoding: UTF-8,发送 HTML 时也应在内容里声明正确的编码。
重启后邮件丢失
MailHog 默认把测试邮件保存在内存里,重启后丢失。测试环境一般不需要持久化;如果确实要保留,参考 MailHog 官方文档配置文件存储。