golang开发者邮件和SMTP测试工具插件Mailpit的使用

Golang开发者邮件和SMTP测试工具插件Mailpit的使用

Mailpit简介

Mailpit是一个小型、快速、低内存、零依赖、多平台的电子邮件测试工具和API,专为开发者设计。

主要功能:

  • 作为SMTP服务器运行
  • 提供现代Web界面查看和测试捕获的电子邮件
  • 包含用于自动化集成测试的API

Mailpit界面截图

主要特性

  • 通过静态二进制文件或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

1 回复

更多关于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!")
}

查看捕获的邮件

发送邮件后,可以通过以下方式查看:

  1. 访问Web界面:http://localhost:8025
  2. 使用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服务器,就能完整测试邮件发送功能。

回到顶部