zoukankan      html  css  js  c++  java
  • Go语言库系列之email

    导读

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

    极速上手

    准备工作

    初始化项目

    go get github.com/jordan-wright/email
    

    本示例项目结构

    .
    ├── go.mod
    ├── go.sum
    └── main.go
    

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

    file

    file

    代码示例

    首先配置好邮件内容

    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
    https://github.com/pingyeaa/golang-examples

    感谢大家的观看,如果觉得文章对你有所帮助,欢迎关注公众号「平也」,聚焦Go语言与技术原理。
    关注我

  • 相关阅读:
    坑爹的微信支付v3,其实没有那么坑
    Mysql探究之null与not null
    Mysql的空值与NULL的区别
    Java编程思想(第4版) 中文清晰PDF完整版
    URI和URL的区别
    html 文本输入框效果大汇集
    HTTP状态码大全
    Silverlight ModelView中调用UI进程
    appium部分api
    appium元素定位
  • 原文地址:https://www.cnblogs.com/pingyeaa/p/12641259.html
Copyright © 2011-2022 走看看