Golang 语言怎么使用 gomail 库发送邮件?
2014 年 2 月 1 日
01
介绍
我们在项目开发中,经常会遇到发送邮件的需求,比如给开发人员发送报警邮件,给用户发送优惠券或兑换码等。
Gomail 是发送电子邮件的简单高效的包。它已经过充分测试和记录。Gomail 只能使用 SMTP 服务器发送电子邮件。但是该 API 灵活,可以轻松实现使用本地 Postfix,API 等发送电子邮件的其他方法。
它使用 gopkg.in 进行了版本控制,因此保证每个版本都不会存在向后不兼容的更改。它需要 Go 1.2 或更高版本。对于 Go 1.5,不使用外部依赖项。
02
gomail 包含的特性
介绍
我们在项目开发中,经常会遇到发送邮件的需求,比如给开发人员发送报警邮件,给用户发送优惠券或兑换码等。
Gomail 是发送电子邮件的简单高效的包。它已经过充分测试和记录。Gomail 只能使用 SMTP 服务器发送电子邮件。但是该 API 灵活,可以轻松实现使用本地 Postfix,API 等发送电子邮件的其他方法。
它使用 gopkg.in 进行了版本控制,因此保证每个版本都不会存在向后不兼容的更改。它需要 Go 1.2 或更高版本。对于 Go 1.5,不使用外部依赖项。
02
gomail 包含的特性
- 附件
- 嵌入图片
- HTML 和文本模板
- 特殊字符的自动编码
- SSL 和 TLS
- 使用相同的 SMTP 连接发送多封电子邮件
03
gomail 安装
使用 go get 安装:
go get gopkg.in/gomail.v2
04
gomail 使用
准备邮箱服务:
如果想要使用 gomail 开发发送邮件的功能,需要准备邮箱服务,除了自建SMTP 服务之外,几乎所有邮箱运营商都支持 SMTP 服务,我们以网易 126 邮箱为例,准备一个网易126 邮箱账号,登录 PC 版邮箱,找到设置,开启 SMTP 服务并记住密码。
示例代码:
package main
import "gopkg.in/gomail.v2"
func main() {
m := gomail.NewMessage()
m.SetHeader("From", "xxx@126.com")
m.SetHeader("To", "xxx@qq.com", "xxx@88.com")
m.SetAddressHeader("Cc", "xxx@163.com", "Dan")
m.SetHeader("Subject", "Hello!")
m.SetBody("text/html", "Hello Bob and Cora!")
// m.Attach("/home/Alex/lolcat.jpg")
d := gomail.NewDialer("smtp.126.com", 25, "xxx@126.com", "Your Password")
// Send the email to Bob, Cora and Dan.
if err := d.DialAndSend(m); err != nil {
panic(err)
}
}
05
常见问题
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.
}
但是请注意,这是不安全的,不应在生产中使用。
06
总结
本文主要是给大家介绍了 Golang 语言中一个非常好用的发送邮件的三方库 gomail,不仅介绍了 gomail 的特性和安装使用方法,还列举了一个常见问题和解决方法。限于篇幅,没有详细介绍 gomail 提供的所有方法,感兴趣的读者可以通过阅读文档深入了解。
关注微信公众号,发送关键字「资料」,免费获取 Go 语言学习资料。
参考资料:
https://github.com/go-gomail/gomail
https://godoc.org/gopkg.in/gomail.v2