Skip to content

email

在 Go 中发送电子邮件通常使用标准库 net/smtp 或第三方库(如 gomailmail)。以下是几种常见的方法来实现发送电子邮件功能。

使用 net/smtp 发送电子邮件

Go 的标准库 net/smtp 提供了简单的邮件发送功能。以下是一个示例,演示如何使用它来发送电子邮件:

示例:使用 net/smtp 发送电子邮件

go
package main

import (
	"fmt"
	"net/smtp"
)

func sendEmail() {
	// 邮件服务器配置
	smtpServer := "smtp.gmail.com"
	smtpPort := "587"
	from := "your-email@gmail.com"  // 发送方邮箱
	password := "your-email-password" // 发送方邮箱的应用密码(推荐使用应用密码而不是邮箱密码)
	to := []string{"recipient@example.com"} // 接收方邮箱

	// 邮件内容
	subject := "Subject: Test Email\n" // 邮件主题
	body := "This is a test email from Go!" // 邮件正文
	message := []byte(subject + "\n" + body)

	// 设置身份验证信息
	auth := smtp.PlainAuth("", from, password, smtpServer)

	// 发送邮件
	err := smtp.SendMail(smtpServer+":"+smtpPort, auth, from, to, message)
	if err != nil {
		fmt.Println("Failed to send email:", err)
		return
	}

	fmt.Println("Email sent successfully!")
}

func main() {
	sendEmail()
}

解释:

  1. 配置 SMTP 服务器:你需要指定 SMTP 服务器的地址和端口(例如,Gmail 的 SMTP 服务器是 smtp.gmail.com,端口为 587)。
  2. 身份验证smtp.PlainAuth 用于生成身份验证信息,输入发件人邮箱、密码(推荐使用应用密码)、SMTP 服务器地址。
  3. 邮件内容Subject 设置邮件的主题,Body 设置邮件的正文内容。
  4. 发送邮件:通过 smtp.SendMail 发送邮件。

注意:

  • 使用 Gmail 等提供商时,你需要使用应用密码(Google 账户的 2FA 开启时,不能使用主密码)。
  • 如果你要通过 Gmail 发送邮件,记得在 Gmail 设置中开启 "低安全应用程序访问" 或使用 Gmail 的 OAuth 2.0 验证机制。

使用 gomail 库发送电子邮件

gomail 是一个流行的第三方库,提供了更高级和简便的电子邮件发送功能。它支持附件、HTML 内容等。

安装 gomail

bash
go get gopkg.in/gomail.v2

示例:使用 gomail 发送电子邮件

go
package main

import (
	"fmt"
	"gopkg.in/gomail.v2"
)

func sendEmail() {
	m := gomail.NewMessage()
	m.SetHeader("From", "your-email@gmail.com")
	m.SetHeader("To", "recipient@example.com")
	m.SetHeader("Subject", "Test Email from gomail")
	m.SetBody("text/plain", "This is a test email sent using gomail.")

	d := gomail.NewDialer("smtp.gmail.com", 587, "your-email@gmail.com", "your-email-password")

	// 发送邮件
	if err := d.DialAndSend(m); err != nil {
		fmt.Println("Failed to send email:", err)
		return
	}

	fmt.Println("Email sent successfully!")
}

func main() {
	sendEmail()
}

解释:

  • gomail.NewMessage():创建一个新的邮件消息。
  • SetHeader:设置邮件的各个头部(发件人、收件人、主题等)。
  • SetBody:设置邮件正文,可以指定内容类型(text/plaintext/html)。
  • gomail.NewDialer:创建一个新的 SMTP 连接器,传入 SMTP 服务器地址、端口、发件人邮箱和密码。
  • DialAndSend:发送邮件。

使用 mail 库发送电子邮件

mail 是另一个第三方库,适合用于更复杂的邮件发送任务,支持附件、HTML 格式等。

安装 mail

bash
go get github.com/xhit/go-simple-mail/v2

示例:使用 mail 库发送电子邮件

go
package main

import (
	"fmt"
	"github.com/xhit/go-simple-mail/v2"
)

func sendEmail() {
	server := mail.NewSMTPClient()

	// 配置 SMTP 服务器
	server.Host = "smtp.gmail.com"
	server.Port = 587
	server.Username = "your-email@gmail.com"
	server.Password = "your-email-password"
	server.Encryption = mail.EncryptionSTARTTLS

	// 创建邮件客户端
	client, err := server.Connect()
	if err != nil {
		fmt.Println("Failed to connect to SMTP server:", err)
		return
	}

	// 创建邮件
	email := mail.NewMSG()
	email.SetFrom("your-email@gmail.com").
		AddTo("recipient@example.com").
		SetSubject("Test Email").
		SetBody(mail.TextPlain, "This is a test email sent using go-simple-mail.")

	// 发送邮件
	err = email.Send(client)
	if err != nil {
		fmt.Println("Failed to send email:", err)
		return
	}

	fmt.Println("Email sent successfully!")
}

func main() {
	sendEmail()
}

解释:

  • mail.NewSMTPClient():创建一个新的 SMTP 客户端。
  • SetFrom, AddTo, SetSubject, SetBody:设置邮件的发件人、收件人、主题和正文。
  • email.Send(client):发送邮件。

总结

  • 使用 net/smtp:适合简单的邮件发送,Go 标准库自带。
  • 使用 gomail:功能强大且易于使用,支持更多功能,如 HTML 内容、附件等。
  • 使用 go-simple-mail:功能丰富,支持不同的 SMTP 加密和更多配置,适用于更复杂的邮件发送需求。

根据需求选择适合的库,gomailgo-simple-mail 更适合处理复杂的邮件发送任务。