記錄一下如何透過Golang中的smtp package來寄信,這邊會應用出的功能為透過查詢外部IP網頁回傳的IP,然後寄信到指定的信箱。開始吧!
程式碼長度其實非常的短,主要分兩大部分,第一部分為發出HTTP Request拿到查詢外部IP網頁回傳的IP,其內容如下:1
2
3
4
5
6
7resp, err := http.Get("http://myexternalip.com/raw")
if err != nil {
	log.Fatalf("failed to query web page: %v",err)
}
defer resp.Body.Close()
strIP, _ := ioutil.ReadAll(resp.Body)
接著,我們開始使用SMTP來寄信,以下會用Gmail的mail server來做完參數傳入smtp.SendMail function:
- 第一個參數為根據https://support.google.com/mail/answer/7126229?hl=zh-Hant 中提到”外寄郵件 (SMTP) 伺服器“為smtp.gmail.com且port設定成587就可以用TLS傳輸。
- 第二個參數即是要傳入向smtp認證的結果,這時可用smtp.PlainAuth並帶入Gmail帳號密碼。
- 第三個到第五個參數則是依序傳入你的Gmail信箱、目標信箱以及內容1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11from := "你的GMAIL帳號" 
 pass := "你的GMAIL密碼"
 to := "目標的信箱"
 err = smtp.SendMail("smtp.gmail.com:587",
 smtp.PlainAuth("", from, pass, "smtp.gmail.com"),
 from, []string{to}, []byte(string(strIP))))
 if err != nil {
 log.Fatalf("failed to send mail: %v",err)
 }
好啦! 以上撰寫完成,就可以讓他run在一個有crontab的Docker Container,固定開始寄信囉!