1. 程式人生 > >Go語言庫系列之email

Go語言庫系列之email

## 導讀 大家好我是平也,今天跟大家介紹一款用來發送郵件的Go語言庫email,目前星星1.3k,非常好用。 ## 極速上手 ### 準備工作 初始化專案 ```shell go get github.com/jordan-wright/email ``` 本示例專案結構 ```shell . ├── go.mod ├── go.sum └── main.go ``` 開啟郵箱SMTP服務,以163郵箱為例,需要先登入到郵箱後臺點選開啟按鈕,在傳送完簡訊之後,會獲取到一個授權碼,將授權碼儲存,後面需要用到。 ![file](https://img2020.cnblogs.com/other/1471773/202004/1471773-20200406112823374-1513944660.jpg) ![file](https://img2020.cnblogs.com/other/1471773/202004/1471773-20200406112823768-412819645.jpg) ### 程式碼示例 首先配置好郵件內容 ```go e := email.NewEmail() e.From = "平也" e.To = []string{"[email protected]"} e.Subject = "發現驚天大祕密!" e.Text = []byte("平也好帥好有智慧哦~") ``` - From:發件人郵箱,格式為“名稱+<郵箱>”,也可以直接寫郵箱,預設顯示的發件人為@符號前的名稱 - To:收件人郵箱地址 - Subject:郵件標題 - Text:郵件正文 呼叫Send方法傳送郵件,第一個引數是你的發件人郵箱的SMTP域名+埠號,第二個引數用於身份認證 ```go e.Send("smtp.163.com:25", smtp.PlainAuth("", "[email protected]", "<你的密碼>", "smtp.163.com")) ``` smtp.PlainAuth - 引數1:通常,identity應該是空字串,以用作使用者名稱。 - 引數2:使用者名稱 - 引數3:密碼,如果拿到了授權碼,則填寫授權碼 - 引數4:伺服器地址,163的地址是smtp.163.com,其他平臺可自行檢視 完整程式碼如下 ```go package main import ( "net/smtp" "github.com/jordan-wright/email" ) func main() { e := email.NewEmail() //e.From = "[email protected]" e.From = "平也 " e.To = []string{"[email protected]"} e.Subject = "發現驚天大祕密!" e.Text = []byte("平也好帥好有智慧哦~") err := e.Send("smtp.163.com:25", smtp.PlainAuth("", "[email protected]", "KQHQCZSXQWPDZYRF", "smtp.163.com")) if err != nil { panic(err) } } ``` ## 拓展 ### CC與BCC CC全稱是Carbon Copy,意為抄送,BCC全稱Blind Carbon Copy,意為暗抄送,收件人看不到被暗抄送給了誰。 ```go e := email.NewEmail() e.Cc = []string{"[email protected]"} e.Bcc = []string{"[email protected]"} ``` ### 另一種初始化方式 可以例項化的時候直接賦值 ```go e := &email.Email{ From: "平也 ", To: []string{"[email protected]"}, Subject: "發現驚天大祕密!", Text: []byte("平也好帥好有智慧哦~"), } ``` ### 傳送附件 傳送附件非常簡單,直接傳入檔名即可 ```go e.AttachFile("attachment.txt") ``` 也可以呼叫Attach自行實現附件傳送,AttachFile其實就是對Attach的封裝 ```go 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提供了連線池的功能 ```go auth := smtp.PlainAuth("", "[email protected]", "<你的密碼>", "smtp.163.com") p, _ := email.NewPool("smtp.163.com:25", 4, auth) ``` 建立成功後,就可以藉助連線池來發送郵件 ```go e := email.NewEmail() e.From = "平也 " e.To = []string{"[email protected]"} e.Subject = "發現驚天大祕密!" e.Text = []byte("平也好帥好有智慧哦~") p.Send(e, 10*time.Second) ``` --- Go語言庫程式碼示例,歡迎star https://github.com/pingyeaa/golang-examples --- 感謝大家的觀看,如果覺得文章對你有所幫助,歡迎關注公眾號「平也」,聚焦Go語言與技術原理。 ![關注我](https://img2020.cnblogs.com/other/1471773/202004/1471773-20200406112824958-832358