中山網(wǎng)站制作費(fèi)用百度熱詞指數(shù)
Go 有內(nèi)置好的本地庫(kù)可以發(fā)送郵件,在 GitHub 上也有別人寫(xiě)好的第三方包可以發(fā)送郵件。
本文將分別介紹一下這兩種發(fā)送郵件的方式。
1、內(nèi)置的net/smtp
為了更好的模擬發(fā)送郵件,推薦一個(gè)郵件測(cè)試工具:MailHog,MailHog 是面向開(kāi)發(fā)人員的電子郵件測(cè)試工具,其將應(yīng)用程序配置為使用 MailHog 進(jìn)行 SMTP 傳遞,并且可以在 Web UI 中查看已經(jīng)發(fā)送的郵件。
MailHog 使用步驟:
先下載需要的版本及對(duì)應(yīng)系統(tǒng)的二進(jìn)制文件: Download the latest release for your platform
以 v1.0.0 Windows10 為例,點(diǎn)擊下圖中紅框開(kāi)始下載。
下載完成之后得到一個(gè) .exe
文件,在文件中找到該文件雙擊啟動(dòng),會(huì)以黑窗口的形式運(yùn)行。
在瀏覽器中訪問(wèn) http://localhost:8025/
在這個(gè)頁(yè)面可以看到開(kāi)發(fā)人員在測(cè)試階段發(fā)送的郵件。
編寫(xiě)代碼:
package mainimport ("fmt""log""net/smtp""time"
)// Email 郵箱
type Email struct {From string `json:"from" describe:"發(fā)送方"`To []string `json:"to" describe:"接收方"`Sender string `json:"sender"describe:"發(fā)送名稱(chēng)"`Subject string `json:"subject" describe:"標(biāo)題"`Content string `json:"content" describe:"內(nèi)容"`EndTime string `json:"end_time" describe:"時(shí)間"`
}// Smtp 郵件服務(wù)
type Smtp struct {Server string `json:"server"`Port int64 `json:"port"`
}func main() {s := Smtp{Server: "127.0.0.1",Port: 1025,}// 一次要發(fā)送給哪些郵箱strings := []string{"2017431971@qq.com","2011235436@qq.com",}e := Email{From: "2017431971@qq.com",To: strings,Sender: "koyal",Subject: "測(cè)試郵件",Content: "這是一個(gè)測(cè)試郵件",EndTime: time.Now().Format("2006-01-02 15:04:05"),}// 定義郵件內(nèi)容message := fmt.Sprintf("Subject: %s\r\n\r\n%s\r\n%s", e.Subject, e.Content, e.EndTime)// 連接到 MailHog 的 SMTP 服務(wù)器auth := smtp.PlainAuth("", "", "", s.Server)for _, str := range strings {err := smtp.SendMail(fmt.Sprintf("%s:%d", s.Server, s.Port), auth, e.From, []string{str}, []byte(message))if err != nil {log.Fatalf("smtp.SendMail is failed , err:%v", err)return}}log.Println("Email send successfully!")}
在本地啟動(dòng)項(xiàng)目,到 MailHog Web UI 中查看是否發(fā)送了郵件
可以看到已經(jīng)拿到剛才發(fā)送的郵件。
在默認(rèn)情況下,上述的兩個(gè)端口 1025 和 8025 分別是監(jiān)聽(tīng) SMTP 服務(wù)器和Web界面服務(wù)器,所以會(huì)用到兩個(gè)不同的端口號(hào)。
2、使用 GitHub 第三方包
這次使用 QQ 郵箱測(cè)試一下是否可以正常的發(fā)送郵件。
首先,需要在 QQ 郵箱中開(kāi)啟 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV 服務(wù)
設(shè)置 => 賬號(hào) => POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV 服務(wù) => 開(kāi)啟服務(wù)
手機(jī)驗(yàn)證等一系列操作完成之后,會(huì)生成一個(gè)授權(quán)碼,
代碼編寫(xiě):
使用 go get github.com/jordan-wright/email
命令拉取第三方包,
package mainimport ("github.com/jordan-wright/email""log""net/smtp"
)func main() {// 實(shí)例化郵件對(duì)象em := email.NewEmail()// 發(fā)送方郵箱em.From = "2017431971@qq.com"// 接收方郵箱em.To = []string{"2017431971@qq.com"}// 郵件標(biāo)題em.Subject = "測(cè)試郵件"// 郵件內(nèi)容em.Text = []byte("hello,這是一個(gè)測(cè)試郵件。")// 發(fā)送郵件 xxxxxxxxx 為剛才生成的授權(quán)碼err := em.Send("smtp.qq.com:587", smtp.PlainAuth("", "2017431971@qq.com", "xxxxxxxxx", "smtp.qq.com"))if err != nil {log.Fatalf("em.Send is failes, err: %v", err)return}log.Println("send successfully...")}
在本地啟動(dòng)項(xiàng)目,去 QQ 郵箱中看是否收到了郵件。
可以正常的拿到想要的郵件。