Golang发送邮件库email

邮件协议

使用编程语言需要遵守编程语言的规范,我们在浏览器里面浏览网页也是一样,需要遵循各种网络协议

那么,我们发送邮件的必须也要先知道有哪些邮件协议可以使用,咱们都来列举一下

SMTPSMTPTCP/IPPOPPOPIMAPIMAP

最终完成所有这些工作都不需要把邮件从服务器下载到用户的个人计算机上

人性化的golang电子邮件库

email
email
  • 发件人、收件人、密件抄送和抄送字段
  • “ test@example.com ”和“< test@example.com >”格式的电子邮件地址
  • 文本和 HTML 消息正文
  • 附件
  • 阅读回执
  • 自定义标题

安装

 go get github.com/jordan-wright/email
gopkg.in/jordan-wright/email.v1

实例演示

使用QQ发送电子邮件

package main

import (
	"net/smtp"

	"github.com/jordan-wright/email"
)

func main() {
	// 实例化返回一个结构体
	e := email.NewEmail()
	
	// From:谁发来的
	e.From = "Psych <517471271@qq.com>"
	
	// To:发给谁的
	e.To = []string{"517471271@qq.com"}
	
	// 抄送,这个地方抄送的意思是:这个邮件在发送后还可以抄送给谁
	e.Bcc = []string{"517471271@qq.com"}
	e.Cc = []string{"517471271@qq.com"}
	
	// 主题,标题
	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("", "517471271@qq.com", "授权码", "smtp.qq.com"))
	if err != nil {
		return
	}
}
POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务POP3/SMTP服务IMAP/SMTP服务

运行结果:

另一种创建电子邮件的方法

还可以通过创建结构体直接创建电子邮箱:

package main

import (
	"net/smtp"
	"net/textproto"

	"github.com/jordan-wright/email"
)

func main() {
	// 实例化返回一个结构体
	e := &email.Email{
		To:      []string{"517471271@qq.com"},
		From:    "Psych <517471271@qq.com>",
		Subject: "邮件测试",
		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("", "517471271@qq.com", "jnzu lnwt xexk bjfg", "smtp.qq.com"))
	if err != nil {
		return
	}
}

Io.Reader创建电子邮件

io.Readeremail.NewEmailFromReader

附加文件

e := NewEmail()
e.AttachFile("test.txt")

使用连接池来发送大量邮件

(var ch <-chan *email.Email)
p := email.NewPool(
	"smtp.gmail.com:587",
	4,
	smtp.PlainAuth("", "517471271@qq.com", "password", "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 
			}
		}
	}()
}

官方文档

https://pkg.go.dev/github.com/jordan-wright/email