Go 發送郵件
1. 安裝依賴包
go get github.com/go-gomail/gomail
2. 示例代碼
email.go
package email
import (
"log"
"github.com/go-gomail/gomail"
)
type EmailInfo struct {
ServerHost string // ServerHost 郵箱服務器地址,如騰訊企業郵箱為smtp.exmail.qq.com
ServerPort int // ServerPort 郵箱服務器端口,如騰訊企業郵箱為465
FromEmail string // FromEmail 發件人郵箱地址
FromPasswd string //發件人郵箱密碼(注意,這里是明文形式)
Recipient []string //收件人郵箱
CC []string //抄送
}
var emailMessage *gomail.Message
/**
* @Author: dcj
* @Date: 2020-04-02 15:45:55
* @Description: 發送郵件
* @Param : subject[主題]、body[內容]、emailInfo[發郵箱需要的信息(參考EmailInfo)]
* @Return:
*/
func SendEmail(subject, body string, emailInfo *EmailInfo) {
if len(emailInfo.Recipient) == 0 {
log.Print("收件人列表為空")
return
}
emailMessage = gomail.NewMessage()
//設置收件人
emailMessage.SetHeader("To", emailInfo.Recipient...)
//設置抄送列表
if len(emailInfo.CC) != 0 {
emailMessage.SetHeader("Cc", emailInfo.CC...)
}
// 第三個參數為發件人別名,如"dcj",可以為空(此時則為郵箱名稱)
emailMessage.SetAddressHeader("From", emailInfo.FromEmail, "dcj")
//主題
emailMessage.SetHeader("Subject", subject)
//正文
emailMessage.SetBody("text/html", body)
d := gomail.NewPlainDialer(emailInfo.ServerHost, emailInfo.ServerPort,
emailInfo.FromEmail, emailInfo.FromPasswd)
err := d.DialAndSend(emailMessage)
if err != nil {
log.Println("發送郵件失敗: ", err)
} else {
log.Println("已成功發送郵件到指定郵箱")
}
}
3. 測試
email_test.go
/*
* @Author: dcj
* @Date: 2020-04-02 12:39:08
* @LastEditTime: 2020-04-02 16:06:40
* @Description: 發送郵件功能測試
*/
package email
import "testing"
func TestSendEmail(t *testing.T) {
reclist := []string{"xxxxxx@163.com"} //收件人郵箱地址
info := &EmailInfo{
"smtp.163.com",
25,
"xxxxxx@qq.com", //發件人郵箱地址
"sciuusqoaqqfbfdd",
reclist,
nil,
}
SendEmail("網頁測試信息", "<h1>測試信息:</h1><p>您收到一條測試信息</p>", info)
}
