欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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邮箱为例,需要先登录到邮箱后台点击开启按钮,在发送完短信之后,会获取到一个授权码,将授权码保存,后面需要用到。

Go语言库系列之email

Go语言库系列之email

代码示例

首先配置好邮件内容

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语言与技术原理。
Go语言库系列之email