导读
你们好我是平也,今天跟你们介绍一款用来发送邮件的Go语言库email,目前星星1.3k,很是好用。git
极速上手
准备工做
初始化项目github
go get github.com/jordan-wright/email
本示例项目结构golang
. ├── go.mod ├── go.sum └── main.go
开启邮箱SMTP服务,以163邮箱为例,须要先登陆到邮箱后台点击开启按钮,在发送完短信以后,会获取到一个受权码,将受权码保存,后面须要用到。shell
代码示例
首先配置好邮件内容服务器
e := email.NewEmail() e.From = "平也<pingyeaa@163.com>" e.To = []string{"602588122@qq.com"} e.Subject = "发现惊天大秘密!" e.Text = []byte("平也好帅好有智慧哦~")
- From:发件人邮箱,格式为“名称+<邮箱>”,也能够直接写邮箱,默认显示的发件人为@符号前的名称
- To:收件人邮箱地址
- Subject:邮件标题
- Text:邮件正文
调用Send方法发送邮件,第一个参数是你的发件人邮箱的SMTP域名+端口号,第二个参数用于身份认证ide
e.Send("smtp.163.com:25", smtp.PlainAuth("", "pingyeaa@163.com", "<你的密码>", "smtp.163.com"))
smtp.PlainAuth性能
- 参数1:一般,identity应该是空字符串,以用做用户名。
- 参数2:用户名
- 参数3:密码,若是拿到了受权码,则填写受权码
- 参数4:服务器地址,163的地址是smtp.163.com,其余平台可自行查看
完整代码以下3d
package main import ( "net/smtp" "github.com/jordan-wright/email" ) func main() { e := email.NewEmail() //e.From = "pingyeaa@163.com" e.From = "平也 <pingyeaa@163.com>" e.To = []string{"xxxxxx@qq.com"} e.Subject = "发现惊天大秘密!" e.Text = []byte("平也好帅好有智慧哦~") err := e.Send("smtp.163.com:25", smtp.PlainAuth("", "pingyeaa@163.com", "KQHQCZSXQWPDZYRF", "smtp.163.com")) if err != nil { panic(err) } }
拓展
CC与BCC
CC全称是Carbon Copy,意为抄送,BCC全称Blind Carbon Copy,意为暗抄送,收件人看不到被暗抄送给了谁。code
e := email.NewEmail() e.Cc = []string{"xxxxxxx@qq.com"} e.Bcc = []string{"xxxxxxx@qq.com"}
另外一种初始化方式
能够实例化的时候直接赋值blog
e := &email.Email{ From: "平也 <pingyeaa@163.com>", To: []string{"xxxxxxx@qq.com"}, 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("", "pingyeaa@163.com", "<你的密码>", "smtp.163.com") p, _ := email.NewPool("smtp.163.com:25", 4, auth)
建立成功后,就能够借助链接池来发送邮件
e := email.NewEmail() e.From = "平也 <pingyeaa@163.com>" e.To = []string{"xxxxxx@qq.com"} e.Subject = "发现惊天大秘密!" e.Text = []byte("平也好帅好有智慧哦~") p.Send(e, 10*time.Second)
Go语言库代码示例,欢迎star https://github.com/pingyeaa/golang-examples
感谢你们的观看,若是以为文章对你有所帮助,欢迎关注公众号「平也」,聚焦Go语言与技术原理。