Go語言庫系列之email
阿新 • • 發佈:2020-04-06
## 導讀
大家好我是平也,今天跟大家介紹一款用來發送郵件的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