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語言與技術原理。
關注我


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM