Go语言库系列之email
程序员文章站
2022-09-26 23:39:11
导读 大家好我是平也,今天跟大家介绍一款用来发送邮件的Go语言库email,目前星星1.3k,非常好用。 极速上手 准备工作 初始化项目 本示例项目结构 开启邮箱SMTP服务,以163邮箱为例,需要先登录到邮箱后台点击开启按钮,在发送完短信之后,会获取到一个授权码,将授权码保存,后面需要用到。 代码 ......
导读
大家好我是平也,今天跟大家介绍一款用来发送邮件的go语言库email,目前星星1.3k,非常好用。
极速上手
准备工作
初始化项目
go get github.com/jordan-wright/email
本示例项目结构
. ├── go.mod ├── go.sum └── main.go
开启邮箱smtp服务,以163邮箱为例,需要先登录到邮箱后台点击开启按钮,在发送完短信之后,会获取到一个授权码,将授权码保存,后面需要用到。
代码示例
首先配置好邮件内容
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域名+端口号,第二个参数用于身份认证
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,其他平台可自行查看
完整代码如下
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,意为暗抄送,收件人看不到被暗抄送给了谁。
e := email.newemail() e.cc = []string{"xxxxxxx@qq.com"} e.bcc = []string{"xxxxxxx@qq.com"}
另一种初始化方式
可以实例化的时候直接赋值
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
感谢大家的观看,如果觉得文章对你有所帮助,欢迎关注公众号「平也」,聚焦go语言与技术原理。
上一篇: 如何教零基础的人认识Python
下一篇: MySQL相关知识整理