記錄一下如何透過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,固定開始寄信囉!