電子郵件在日常工作中有很大用途,凡專案或任務,有郵件來往可避免扯皮背鍋。而在一些自動化的應用場合,也使用得廣泛,特別是系統監控方面,如果在資源使用達到警戒線之前自動發郵件通知運維人員,能消除隱患於前期,而不至於臨時臨急去做善後方案。
對於多人協合(不管是不是異地)場合,郵件也有用武之地,當有程式碼或文件更新時,自動發郵件通知專案成員或領導,提醒各方人員知曉並及時更新。
說到發郵件,不得不提用程式的方式實現。下面就來為大家介紹一下怎麼使用Go語言來實現傳送電子郵件。Go語言擁有大量的庫,非常方便使用。
Go語言使用 gomail 包來傳送郵箱,程式碼如下所示:
package main
import (
"strings"
"github.com/go-gomail/gomail"
)
type EmailParam struct {
// ServerHost 郵箱伺服器地址,如騰訊郵箱為smtp.qq.com
ServerHost string
// ServerPort 郵箱伺服器埠,如騰訊郵箱為465
ServerPort int
// FromEmail 發件人郵箱地址
FromEmail string
// FromPasswd 發件人郵箱密碼(注意,這裡是明文形式),TODO:如果設定成密文?
FromPasswd string
// Toers 接收者郵件,如有多個,則以英文逗號(“,”)隔開,不能為空
Toers string
// CCers 抄送者郵件,如有多個,則以英文逗號(“,”)隔開,可以為空
CCers string
}
// 全域性變數,因為發件人賬號、密碼,需要在傳送時才指定
// 注意,由於是小寫,外面的包無法使用
var serverHost, fromEmail, fromPasswd string
var serverPort int
var m *gomail.Message
func InitEmail(ep *EmailParam) {
toers := []string{}
serverHost = ep.ServerHost
serverPort = ep.ServerPort
fromEmail = ep.FromEmail
fromPasswd = ep.FromPasswd
m = gomail.NewMessage()
if len(ep.Toers) == 0 {
return
}
for _, tmp := range strings.Split(ep.Toers, ",") {
toers = append(toers, strings.TrimSpace(tmp))
}
// 收件人可以有多個,故用此方式
m.SetHeader("To", toers...)
//抄送列表
if len(ep.CCers) != 0 {
for _, tmp := range strings.Split(ep.CCers, ",") {
toers = append(toers, strings.TrimSpace(tmp))
}
m.SetHeader("Cc", toers...)
}
// 發件人
// 第三個引數為發件人別名,如"李大錘",可以為空(此時則為郵箱名稱)
m.SetAddressHeader("From", fromEmail, "")
}
// SendEmail body支援html格式字串
func SendEmail(subject, body string) {
// 主題
m.SetHeader("Subject", subject)
// 正文
m.SetBody("text/html", body)
d := gomail.NewPlainDialer(serverHost, serverPort, fromEmail, fromPasswd)
// 傳送
err := d.DialAndSend(m)
if err != nil {
panic(err)
}
}
func main() {
serverHost := "smtp.qq.com"
serverPort := 465
fromEmail := "[email protected]" //發件人郵箱
fromPasswd := "xumkkzfscmxxxxxx" //授權碼
myToers := "[email protected]" // 收件人郵箱,逗號隔開
myCCers := "" //"[email protected]"
subject := "這是主題"
body := `這是正文<br>
Hello <a href = "http://c.biancheng.net/">C語言中文網</a>`
// 結構體賦值
myEmail := &EmailParam {
ServerHost: serverHost,
ServerPort: serverPort,
FromEmail: fromEmail,
FromPasswd: fromPasswd,
Toers: myToers,
CCers: myCCers,
}
InitEmail(myEmail)
SendEmail(subject, body)
}
使用自定義用戶端發放郵件需要以下兩個要素:
1) 傳送方的郵箱必須開啟 stmt 和 pop3 通道,以 qq 郵箱為例,登陸 qq 郵箱 -> 設定 -> 賬戶 -> 開啟 pop3 和 stmt 服務