SpringVortexNotes

MailHog 测试邮箱安装部署指南

zjc 于 2026-08-15 发布

下载地址/官网:MailHog GitHub Releases

MailHog 是本地开发环境的测试邮箱。它会假装成一个 SMTP 服务器,接收 service-mail 发出来的邮件,并在网页里查看内容。这样调试邮件功能时不会把测试邮件发到真实用户邮箱。

端口和用途

端口 用途
1025 SMTP 服务,应用把邮件发到这里
8025 Web 页面和 API,用浏览器查看邮件

MailHog 默认没有认证,只适合放在本机或内网测试环境,绝不能暴露公网。

Windows 安装 MailHog

  1. 创建目录:
New-Item -ItemType Directory -Force -Path D:\apps\mailhog
  1. 下载 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"
  1. 启动:
cd D:\apps\mailhog
.\MailHog.exe
  1. 看到 MailHog 输出 HTTP 和 SMTP 监听信息后,打开页面:
http://127.0.0.1:8025/
  1. 使用 Windows PowerShell 发送一封测试邮件:
Send-MailMessage `
  -SmtpServer "127.0.0.1" `
  -Port 1025 `
  -From "dev@localhost" `
  -To "test@example.com" `
  -Subject "MailHog Test" `
  -Body "Hello MailHog"
  1. 回到浏览器刷新,能看到这封邮件即为部署成功。

  2. 停止服务时,在启动窗口按 Ctrl+C

Ubuntu 安装 MailHog

  1. 下载 Linux x64 版本:
curl -L \
  https://github.com/mailhog/MailHog/releases/download/v1.0.1/MailHog_linux_amd64 \
  -o MailHog_linux_amd64
  1. 安装到 /usr/local/bin
sudo install -m 0755 MailHog_linux_amd64 /usr/local/bin/mailhog
  1. 先手动启动验证:
mailhog
  1. 另开一个终端,确认端口:
ss -lntp | grep -E '1025|8025'
  1. 回到第一个终端按 Ctrl+C 停止。

  2. 创建 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
  1. 启动并设置开机自启:
sudo systemctl daemon-reload
sudo systemctl enable --now mailhog
  1. 查看状态:
sudo systemctl status mailhog --no-pager
sudo journalctl -u mailhog -f
  1. 访问页面:
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

  1. 下载并安装:
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
  1. 启动:
~/apps/mailhog/MailHog
  1. 访问:
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

https://github.com/springvortex/spring-cloud-alibaba/blob/release/v1.0.0/service-mail/src/main/resources/application-dev.yaml

如果 MailHog 部署在另一台内网服务器上,把 host 改成那台服务器的内网 IP,端口仍然是 1025。业务服务所在机器必须能访问这个端口。

安全提醒

  1. MailHog 不做真实认证,不要暴露公网。
  2. 防火墙只允许可信开发网段访问 1025 和 8025。
  3. 测试邮件里不要放真实用户手机号、密码、密钥等敏感信息。
  4. 生产邮件应使用真实 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 官方文档配置文件存储。