
本文介绍如何使用 go 语言通过 smtp 协议将测试邮件发送至本地 mailhog 实例,实现自动化邮件捕获与调试,并提供可直接运行的代码示例及关键配置说明。
本文介绍如何使用 go 语言通过 smtp 协议将测试邮件发送至本地 mailhog 实例,实现自动化邮件捕获与调试,并提供可直接运行的代码示例及关键配置说明。
MailHog 是一款轻量级、专为开发和测试设计的邮件捕获工具,它模拟 SMTP 服务器并提供 Web 界面查看收件箱。与真实邮件服务不同,MailHog 不需认证、默认监听 1025 端口(SMTP)和 8025 端口(Web UI),因此在 Go 中发送测试邮件时,只需将 MailHog 的地址作为 SMTP 服务器配置即可,无需用户名密码。
推荐使用成熟稳定的 Gomail 库(v2 版本),它简洁易用、无依赖、支持纯文本/HTML 邮件及附件。以下是一个完整、可立即运行的示例:
package main
import (
"log"
"gopkg.in/gomail.v2"
)
func main() {
// 创建新邮件
m := gomail.NewMessage()
m.SetHeader("From", "test@example.com")
m.SetHeader("To", "recipient@example.com")
m.SetHeader("Subject", "MailHog 测试邮件")
m.SetBody("text/plain", "这是一封发往 MailHog 的测试邮件!\n时间: " + string(rune(0x2705)))
// 配置 MailHog 为 SMTP 服务器(默认地址:localhost:1025)
// 注意:MailHog 不要求认证,故用户名/密码留空或设为任意字符串
dialer := gomail.NewPlainDialer("localhost", 1025, "", "")
// 发送邮件
if err := dialer.DialAndSend(m); err != nil {
log.Fatalf("发送失败: %v", err)
}
log.Println("✅ 邮件已成功发送至 MailHog!请访问 http://localhost:8025 查看")
}
? 关键注意事项:
- ✅ 端口必须为 1025:MailHog 默认 SMTP 端口是 1025(非 587 或 25),切勿沿用生产 SMTP 配置;
- ✅ 认证凭据为空:NewPlainDialer 的用户名和密码参数应传入空字符串 "" —— MailHog 默认禁用认证,传非空值可能导致连接拒绝;
- ✅ 确保 MailHog 正在运行:启动命令示例:mailhog(需提前安装)或 docker run -d -p 1025:1025 -p 8025:8025 --name mailhog mailhog/mailhog;
- ✅ 若使用 Docker,请确认 Go 程序中 SMTP 地址为 host.docker.internal:1025(macOS/Windows)或宿主机 IP(Linux);
? 进阶提示:你还可以通过 MailHog 的 REST API(如 DELETE /api/v2/messages)在测试前后清空邮箱,实现更健壮的集成测试流程。
通过上述方式,你就能在单元测试、CI 流程或本地开发中,完全自动化地生成、发送并验证邮件行为,大幅提升邮件相关功能的可测性与可靠性。











