golang开发者邮件和SMTP测试工具插件Mailpit的使用
Golang开发者邮件和SMTP测试工具插件Mailpit的使用
Mailpit简介
Mailpit是一个小型、快速、低内存、零依赖、多平台的电子邮件测试工具和API,专为开发者设计。
主要功能:
- 作为SMTP服务器运行
- 提供现代Web界面查看和测试捕获的电子邮件
- 包含用于自动化集成测试的API
主要特性
- 通过静态二进制文件或Docker镜像运行
- 现代Web UI,可查看邮件(格式化HTML、HTML源代码、纯文本、邮件头等)
- SMTP服务器,支持STARTTLS或SSL/TLS
- REST API用于集成测试
- 实时Web UI更新
- 可选的POP3服务器
- HTML检查功能测试邮件客户端兼容性
- 链接检查功能测试消息链接
- 垃圾邮件检查功能
- 消息标记功能
- SMTP中继和转发功能
安装方法
通过包管理器安装
- Mac:
brew install mailpit
(后台运行:brew services start mailpit
) - Arch Linux: AUR中的
mailpit
- FreeBSD:
pkg install mailpit
通过脚本安装(Linux & Mac)
sudo sh < <(curl -sL https://raw.githubusercontent.com/axllent/mailpit/develop/install.sh)
下载静态二进制文件
可以从发布页面下载适用于Windows、Linux和Mac的静态二进制文件。
Docker
提供386、amd64和arm64架构的Docker镜像。
使用示例
基本使用
Mailpit默认Web UI监听http://0.0.0.0:8025
,SMTP端口监听0.0.0.0:1025
。
运行mailpit -h
查看选项。
Golang中使用Mailpit测试邮件发送
下面是一个完整的Golang示例,演示如何使用Mailpit测试邮件发送功能:
package main
import (
"crypto/tls"
"fmt"
"net/smtp"
)
func main() {
// Mailpit SMTP配置
smtpHost := "localhost"
smtpPort := "1025"
smtpUser := "" // Mailpit默认不需要认证
smtpPass := "" // Mailpit默认不需要认证
from := "sender@example.com"
to := []string{"recipient@example.com"}
message := []byte("Subject: Mailpit Test\r\n" +
"\r\n" +
"This is a test email sent using Mailpit for SMTP testing.\r\n")
// 建立SMTP连接
auth := smtp.PlainAuth("", smtpUser, smtpPass, smtpHost)
// 注意:Mailpit默认不需要TLS,但可以配置
tlsConfig := &tls.Config{
InsecureSkipVerify: true, // 仅测试环境使用
ServerName: smtpHost,
}
// 连接到SMTP服务器
conn, err := tls.Dial("tcp", fmt.Sprintf("%s:%s", smtpHost, smtpPort), tlsConfig)
if err != nil {
panic(err)
}
defer conn.Close()
client, err := smtp.NewClient(conn, smtpHost)
if err != nil {
panic(err)
}
defer client.Close()
// 认证(如果需要)
if err = client.Auth(auth); err != nil {
panic(err)
}
// 设置发件人
if err = client.Mail(from); err != nil {
panic(err)
}
// 设置收件人
for _, addr := range to {
if err = client.Rcpt(addr); err != nil {
panic(err)
}
}
// 发送邮件内容
w, err := client.Data()
if err != nil {
panic(err)
}
_, err = w.Write(message)
if err != nil {
panic(err)
}
err = w.Close()
if err != nil {
panic(err)
}
// 退出
client.Quit()
fmt.Println("Email sent successfully! Check Mailpit UI at http://localhost:8025")
}
使用Mailpit API检查邮件
Mailpit提供了REST API,可以用于自动化测试:
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
type Message struct {
ID string `json:"ID"`
From string `json:"From"`
To []string `json:"To"`
Subject string `json:"Subject"`
// 其他字段可以根据需要添加
}
func main() {
// Mailpit API端点
apiURL := "http://localhost:8025/api/v1/messages"
// 发送GET请求获取邮件列表
resp, err := http.Get(apiURL)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
// 解析JSON响应
var messages []Message
err = json.Unmarshal(body, &messages)
if err != nil {
panic(err)
}
// 打印邮件信息
fmt.Println("Messages in Mailpit:")
for _, msg := range messages {
fmt.Printf("ID: %s\nFrom: %s\nTo: %v\nSubject: %s\n\n",
msg.ID, msg.From, msg.To, msg.Subject)
}
}
配置sendmail
Mailpit的SMTP服务器默认运行在1025端口,您可能需要配置发送应用程序通过该端口发送邮件。Mailpit也可以作为sendmail的替代品。
更多关于golang开发者邮件和SMTP测试工具插件Mailpit的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang开发者邮件和SMTP测试工具插件Mailpit的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用Mailpit进行Golang邮件和SMTP测试
Mailpit是一个轻量级的SMTP测试服务器和邮件查看工具,特别适合开发者在本地测试邮件发送功能。对于Golang开发者来说,Mailpit可以完美配合邮件发送代码进行测试。
Mailpit简介
Mailpit主要功能:
- 捕获所有发送到它的邮件
- 提供Web界面查看邮件
- 支持SMTP和API接口
- 轻量级,易于安装和使用
安装Mailpit
使用Docker安装
docker run -p 8025:8025 -p 1025:1025 -d axllent/mailpit
直接下载二进制文件
可以从GitHub发布页面下载适合你系统的版本。
Golang中使用Mailpit测试邮件发送
基本SMTP邮件发送示例
package main
import (
"fmt"
"net/smtp"
)
func main() {
// Mailpit默认SMTP监听在1025端口
mailpitHost := "localhost:1025"
// 发件人信息
from := "sender@example.com"
to := []string{"recipient@example.com"}
// 邮件内容
message := []byte("To: " + to[0] + "\r\n" +
"Subject: Test Email from Go\r\n" +
"\r\n" +
"This is a test email sent from a Go program.\r\n")
// 发送邮件
err := smtp.SendMail(mailpitHost, nil, from, to, message)
if err != nil {
fmt.Println("Error sending email:", err)
return
}
fmt.Println("Email sent successfully!")
}
使用更完整的邮件库
推荐使用github.com/go-mail/mail
库发送更复杂的邮件:
package main
import (
"fmt"
"gopkg.in/mail.v2"
)
func main() {
// 创建新邮件
m := mail.NewMessage()
m.SetHeader("From", "sender@example.com")
m.SetHeader("To", "recipient@example.com")
m.SetHeader("Subject", "Test Email with Attachment")
m.SetBody("text/plain", "This is the body of the email.")
// 添加附件
m.Attach("document.pdf")
// 使用Mailpit发送
d := mail.NewDialer("localhost", 1025, "", "")
// 发送邮件
if err := d.DialAndSend(m); err != nil {
fmt.Println("Error sending email:", err)
return
}
fmt.Println("Email sent successfully!")
}
查看捕获的邮件
发送邮件后,可以通过以下方式查看:
- 访问Web界面:
http://localhost:8025
- 使用API获取邮件列表:
http://localhost:8025/api/v1/messages
高级配置
使用环境变量配置
package main
import (
"fmt"
"os"
"gopkg.in/mail.v2"
)
func main() {
// 从环境变量获取配置
smtpHost := os.Getenv("SMTP_HOST")
if smtpHost == "" {
smtpHost = "localhost" // 默认为Mailpit
}
smtpPort := 1025 // Mailpit默认端口
m := mail.NewMessage()
m.SetHeader("From", "app@example.com")
m.SetHeader("To", "user@example.com")
m.SetHeader("Subject", "Environment Configured Email")
m.SetBody("text/html", "<h1>Hello</h1><p>This email was sent using environment variables.</p>")
d := mail.NewDialer(smtpHost, smtpPort, "", "")
if err := d.DialAndSend(m); err != nil {
fmt.Println("Error sending email:", err)
return
}
fmt.Println("Email sent successfully!")
}
测试HTML邮件
package main
import (
"fmt"
"gopkg.in/mail.v2"
)
func main() {
m := mail.NewMessage()
m.SetHeader("From", "noreply@example.com")
m.SetHeader("To", "user@example.com")
m.SetHeader("Subject", "HTML Email Test")
m.SetBody("text/html", `
<html>
<body>
<h1>Welcome!</h1>
<p>This is a <strong>HTML</strong> email sent from Go.</p>
<a href="https://example.com">Visit our website</a>
</body>
</html>
`)
d := mail.NewDialer("localhost", 1025, "", "")
if err := d.DialAndSend(m); err != nil {
fmt.Println("Error sending email:", err)
return
}
fmt.Println("HTML email sent successfully!")
}
集成测试示例
package main
import (
"testing"
"gopkg.in/mail.v2"
)
func TestEmailSending(t *testing.T) {
m := mail.NewMessage()
m.SetHeader("From", "test@example.com")
m.SetHeader("To", "test@example.com")
m.SetHeader("Subject", "Test Email")
m.SetBody("text/plain", "This is a test email for unit testing.")
d := mail.NewDialer("localhost", 1025, "", "")
if err := d.DialAndSend(m); err != nil {
t.Errorf("Failed to send email: %v", err)
}
// 这里可以添加API调用检查Mailpit是否收到了邮件
// 通常使用http.Client调用Mailpit的API
}
Mailpit是Golang开发者测试邮件功能的理想工具,它简单易用,无需配置真实的SMTP服务器,就能完整测试邮件发送功能。