编程

如何使用 Golang 的 Gomail 发送电子邮件

165 2025-04-07 17:42:00

简介

Gomail 是一个用于发送电子邮件的简单高效的 Go 包。它经过充分测试并且文档化良好。

Gomail 只能使用 SMTP 服务器发送电子邮件。不过它的 API 很灵活,可以轻松实现通过本地 Postfix 或 API 等发送邮件。

它使用 gopkg.in 进行了版本控制,因此可以保证每个版本都不会存在向后不兼容的变更。

它要求使用 Go 1.2 或更高版本。自 Go 1.5,没有使用外部依赖。

特性

Gomail 支持:

  • 附件
  • 嵌入图片
  • HTML 及文本模板
  • 特殊字符的自动编码
  • SSL 及 TLS
  • 使用同一个 SMTP 连接发送多个邮件

文档

https://godoc.org/gopkg.in/gomail.v2

下载

go get gopkg.in/gomail.v2

示例

m := gomail.NewMessage()
m.SetHeader("From", "alex@example.com")
m.SetHeader("To", "bob@example.com", "cora@example.com")
m.SetAddressHeader("Cc", "dan@example.com", "Dan")
m.SetHeader("Subject", "Hello!")
m.SetBody("text/html", "Hello <b>Bob</b> and <i>Cora</i>!")
m.Attach("/home/Alex/lolcat.jpg")

d := gomail.NewDialer("smtp.example.com", 587, "user", "123456")

// Send the email to Bob, Cora and Dan.
if err := d.DialAndSend(m); err != nil {
	panic(err)
}

常见问题

x509: certificate signed by unknown authority

如果收到此错误,则表示运行 Gomail 的客户端认为 SMTP 服务器使用的证书无效。一个快速的解决方法是,可以通过 SetTLSConfig 绕过服务器证书链和主机名的验证。

package main

import (
 "crypto/tls"

 "gopkg.in/gomail.v2"
)

func main() {
 d := gomail.NewDialer("smtp.example.com", 587, "user", "123456")
 d.TLSConfig = &tls.Config{InsecureSkipVerify: true}

    // Send emails using d.
}

但是请注意,这是不安全的,不应在生产中使用。g