在實際項目中,可能會遇到發(fā)送郵件的需求,所以就試著實現(xiàn)了一下??赡苣壳耙策€沒有實際遇到此需求,不過也可以先動手實現(xiàn)一下,也許此需求正在路上。
1、安裝 gomail 包:
go get -v gopkg.in/gomail.v2
2、完整代碼:
package main
import (
"fmt"
"gopkg.in/gomail.v2"
"mime"
)
/*
go郵件發(fā)送
*/
func SendMail(mailTo []string, subject string, body string) error {
// 設(shè)置郵箱主體
mailConn := map[string]string{
"user": "xxx@qq.com", //發(fā)送人郵箱(郵箱以自己的為準)
"pass": "xxx", //發(fā)送人郵箱的密碼,現(xiàn)在可能會需要郵箱 開啟授權(quán)密碼后在pass填寫授權(quán)碼
"host": "smtp.qq.com", //郵箱服務(wù)器(此時用的是qq郵箱)
}
m := gomail.NewMessage(
//發(fā)送文本時設(shè)置編碼,防止亂碼。 如果txt文本設(shè)置了之后還是亂碼,那可以將原txt文本在保存時
//就選擇utf-8格式保存
gomail.SetEncoding(gomail.Base64),
)
m.SetHeader("From", m.FormatAddress(mailConn["user"], "LLL")) // 添加別名
m.SetHeader("To", mailTo...) // 發(fā)送給用戶(可以多個)
m.SetHeader("Subject", subject) // 設(shè)置郵件主題
m.SetBody("text/html", body) // 設(shè)置郵件正文
//一個文件(加入發(fā)送一個 txt 文件):/tmp/foo.txt,我需要將這個文件以郵件附件的方式進行發(fā)送,同時指定附件名為:附件.txt
//同時解決了文件名亂碼問題
name := "附件.txt"
m.Attach("E:/GoCode/src/goMail/gomail.txt",
gomail.Rename(name), //重命名
gomail.SetHeader(map[string][]string{
"Content-Disposition": []string{
fmt.Sprintf(`attachment; filename="%s"`, mime.QEncoding.Encode("UTF-8", name)),
},
}),
)
/*
創(chuàng)建SMTP客戶端,連接到遠程的郵件服務(wù)器,需要指定服務(wù)器地址、端口號、用戶名、密碼,如果端口號為465的話,
自動開啟SSL,這個時候需要指定TLSConfig
*/
d := gomail.NewDialer(mailConn["host"], 465, mailConn["user"], mailConn["pass"]) // 設(shè)置郵件正文
//d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
err := d.DialAndSend(m)
return err
}
func main() {
// 郵件接收方
mailTo := []string{
//可以是多個接收人
"xxx@163.com",
"xxx@qq.com",
}
subject := "Hello World!" // 郵件主題
body := "測試發(fā)送郵件" // 郵件正文
err := SendMail(mailTo, subject, body)
if err != nil {
fmt.Println("Send fail! - ", err)
return
}
fmt.Println("Send successfully!")
}