导读
大家好我是平也,今天跟大家介绍一款用来发送邮件的Go语言库email,目前星星1.3k,非常好用。
极速上手
准备工作
初始化项目
go get github.com/jordan-wright/email
本示例项目结构
.
├── go.mod
├── go.sum
└── main.go
开启邮箱SMTP服务,以163邮箱为例,需要先登录到邮箱后台点击开启按钮,在发送完短信之后,会获取到一个授权码,将授权码保存,后面需要用到。
代码示例
首先配置好邮件内容
e := email.NewEmail()
e.From = "平也"
e.To = []string{"[email protected]"}
e.Subject = "发现惊天大秘密!"
e.Text = []byte("平也好帅好有智慧哦~")
- From:发件人邮箱,格式为“名称+<邮箱>”,也可以直接写邮箱,默认显示的发件人为@符号前的名称
- To:收件人邮箱地址
- Subject:邮件标题
- Text:邮件正文
调用Send方法发送邮件,第一个参数是你的发件人邮箱的SMTP域名+端口号,第二个参数用于身份认证
e.Send("smtp.163.com:25", smtp.PlainAuth("", "[email protected]", "<你的密码>", "smtp.163.com"))
smtp.PlainAuth
- 参数1:通常,identity应该是空字符串,以用作用户名。
- 参数2:用户名
- 参数3:密码,如果拿到了授权码,则填写授权码
- 参数4:服务器地址,163的地址是smtp.163.com,其他平台可自行查看
完整代码如下
package main
import (
"net/smtp"
"github.com/jordan-wright/email"
)
func main() {
e := email.NewEmail()
//e.From = "[email protected]"
e.From = "平也 "
e.To = []string{"[email protected]"}
e.Subject = "发现惊天大秘密!"
e.Text = []byte("平也好帅好有智慧哦~")
err := e.Send("smtp.163.com:25", smtp.PlainAuth("", "[email protected]", "KQHQCZSXQWPDZYRF", "smtp.163.com"))
if err != nil {
panic(err)
}
}
拓展
CC与BCC
CC全称是Carbon Copy,意为抄送,BCC全称Blind Carbon Copy,意为暗抄送,收件人看不到被暗抄送给了谁。
e := email.NewEmail()
e.Cc = []string{"[email protected]"}
e.Bcc = []string{"[email protected]"}
另一种初始化方式
可以实例化的时候直接赋值
e := &email.Email{
From: "平也 ",
To: []string{"[email protected]"},
Subject: "发现惊天大秘密!",
Text: []byte("平也好帅好有智慧哦~"),
}
发送附件
发送附件非常简单,直接传入文件名即可
e.AttachFile("attachment.txt")
也可以调用Attach自行实现附件发送,AttachFile其实就是对Attach的封装
func (e *Email) AttachFile(filename string) (a *Attachment, err error) {
f, err := os.Open(filename)
if err != nil {
return
}
defer f.Close()
ct := mime.TypeByExtension(filepath.Ext(filename))
basename := filepath.Base(filename)
return e.Attach(f, basename, ct)
}
连接池
由于频繁发送邮件会不断的与SMTP服务器建立连接,比较影响性能,所以email提供了连接池的功能
auth := smtp.PlainAuth("", "[email protected]", "<你的密码>", "smtp.163.com")
p, _ := email.NewPool("smtp.163.com:25", 4, auth)
创建成功后,就可以借助连接池来发送邮件
e := email.NewEmail()
e.From = "平也 "
e.To = []string{"[email protected]"}
e.Subject = "发现惊天大秘密!"
e.Text = []byte("平也好帅好有智慧哦~")
p.Send(e, 10*time.Second)