Golang发送邮件库email
- golang本身有一个SMTP协议,但是这个协议配置起来比较的复杂,所以我们使用一下第三方库来实现。
人性化的golang电子邮件库
-
email 包装设计的易于使用,足够的灵活。不会受到限制。是一个非常人性化的golang邮件库
-
email库现在支持以下内容
- 发件人,收件人,密件抄送和抄送字段
- “[email protected]”和“[email protected]”格式的电子邮件地址
- 文本和HTML消息正文
- 附件
- 阅读回执
安装使用
go get github.com/jordan-wright/email
- ⚠️:email这个库的版本 >1需要Go1.5或更高的版本
- ⚠️:如果您需要与以前的Go版本进行兼容,可以使用
gopkg.in/jordan-wright/email.v1
中的以前的包
案例
使用QQ发送电子邮件
package main
import (
"github.com/jordan-wright/email"
"net/smtp"
)
func main() {
//实例化返回一个结构体
e := email.NewEmail()
//From:谁发来的
e.From = "Crisp <[email protected]>"
//To:发给谁的
e.To = []string{
"[email protected]"}
//抄送,这个地方抄送的意思是,这个邮件在发送后还可以抄送给谁
e.Bcc = []string{
"[email protected]"}
e.Cc = []string{
"[email protected]"}
//主题,标题
e.Subject = "测试golang email库"
//普通文本内容,支持html
e.Text = []byte("小朋友!!!")
e.HTML = []byte("<h1>html 小朋友!!!</h1>")
//send方法:smtp.qq.com:587:QQ email相关的域名端口号 smtp.PlainAuth:第一个参数为空,第二个参数为自己的邮箱,第三个参数为授权码,下面有讲如何获取授权码
err := e.Send("smtp.qq.com:587", smtp.PlainAuth("", "[email protected]", "授权码", "smtp.qq.com"))
if err != nil {
return
}
}
-
如何获取验证密码
创建结构直接创建电子邮件
package main
import (
"github.com/jordan-wright/email"
"net/smtp"
"net/textproto"
)
func main() {
e := &email.Email{
To: []string{
"[email protected]"},
From: "Crisp <[email protected]>",
Subject: "测试golang email库",
Text: []byte("小朋友!!!"),
HTML: []byte("<h1>html 小朋友!!!</h1>"),
Headers: textproto.MIMEHeader{
},
}
//send方法:smtp.qq.com:587:QQ email相关的域名端口号 smtp.PlainAuth:授权 第三个参数授权码需要注意,上面有讲如何获取授权码
err := e.Send("smtp.qq.com:587", smtp.PlainAuth("", "[email protected]", "授权码", "smtp.qq.com"))
if err != nil {
return
}
}
Io.Reader创建电子邮件
o.Reader
实现这个接口的任意类型创建电子邮件 email.NewEmailFromReader
附加文件
e := NewEmail()
e.AttachFile("test.txt")
使用连接池来发送大量邮件
(var ch <-chan *email.Email)
p := email.NewPool(
"smtp.gmail.com:587",
4,
smtp.PlainAuth("", "[email protected]", "ryqnogv3456dmaceiha", "smtp.qq.com"),
)
for i := 0; i < 4; i++ {
go func() {
for e := range ch {
err := p.Send(e, 10*time.Second)
if err != nil {
return
}
}
}()
}