前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go语言库系列之email

Go语言库系列之email

作者头像
平也
发布2020-04-08 15:16:48
7380
发布2020-04-08 15:16:48
举报
文章被收录于专栏:平也平也

导读

大家好我是平也,今天跟大家介绍一款用来发送邮件的Go语言库email,目前星星1.3k,非常好用。

极速上手

准备工作

初始化项目

代码语言:javascript
复制
go get github.com/jordan-wright/email

本示例项目结构

代码语言:javascript
复制
.
├── go.mod
├── go.sum
└── main.go

开启邮箱SMTP服务,以163邮箱为例,需要先登录到邮箱后台点击开启按钮,在发送完短信之后,会获取到一个授权码,将授权码保存,后面需要用到。

file
file
file
file

代码示例

首先配置好邮件内容

代码语言:javascript
复制
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域名+端口号,第二个参数用于身份认证

代码语言:javascript
复制
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,其他平台可自行查看

完整代码如下

代码语言:javascript
复制
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,意为暗抄送,收件人看不到被暗抄送给了谁。

代码语言:javascript
复制
e := email.NewEmail()
e.Cc = []string{"xxxxxxx@qq.com"}
e.Bcc = []string{"xxxxxxx@qq.com"}

另一种初始化方式

可以实例化的时候直接赋值

代码语言:javascript
复制
e := &email.Email{
  From:    "平也 <pingyeaa@163.com>",
  To:      []string{"xxxxxxx@qq.com"},
  Subject: "发现惊天大秘密!",
  Text:    []byte("平也好帅好有智慧哦~"),
}

发送附件

发送附件非常简单,直接传入文件名即可

代码语言:javascript
复制
e.AttachFile("attachment.txt")

也可以调用Attach自行实现附件发送,AttachFile其实就是对Attach的封装

代码语言:javascript
复制
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提供了连接池的功能

代码语言:javascript
复制
auth := smtp.PlainAuth("", "pingyeaa@163.com", "<你的密码>", "smtp.163.com")
p, _ := email.NewPool("smtp.163.com:25", 4, auth)

创建成功后,就可以借助连接池来发送邮件

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • 极速上手
    • 准备工作
      • 代码示例
      • 拓展
        • CC与BCC
          • 另一种初始化方式
            • 发送附件
              • 连接池
              • Go语言库代码示例,欢迎star https://github.com/pingyeaa/golang-examples
              相关产品与服务
              短信
              腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档