「Golang筆記」如何使用SMTP來寄信

記錄一下如何透過Golang中的smtp package來寄信,這邊會應用出的功能為透過查詢外部IP網頁回傳的IP,然後寄信到指定的信箱。開始吧!

程式碼長度其實非常的短,主要分兩大部分,第一部分為發出HTTP Request拿到查詢外部IP網頁回傳的IP,其內容如下:

1
2
3
4
5
6
7
resp, 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
    11
    from := "你的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,固定開始寄信囉!

0%