Golang:使用自定義模板發送郵件

https://medium.com/@itsHabib/sending-emails-with-go-using-a-custom-template-ae863b65a859
做者:Michael Habib
譯者http://oopsguy.comhtml

幾周前,我開始爲一個證券投資組合網站工做。雖然我只能使用 React 來完成整個網站,但我決定使用 Go 來建立一個能夠處理某些任務(例如發送 email)的 API 服務器,相信這是一個很好的想法。網站有一個 contact 頁面,目前看起來像這樣:golang

contact me

我想使用專門爲此 contact 表單申請的 Gmail 賬戶發送一封郵件。我之前只用過 Javascript 來發送電子郵件,沒有特別選擇 Go。但爲何不嘗試一下 Go 呢?我以爲 Go 很棒。數組

步驟一:建立必要的文件

你只須要兩個文件,一個 html 文件和一個 go 文件。它們能夠放置在同一目錄。你只需確保能正確地引用到 html 文件便可。服務器

注意:你甚至不須要 html 文件,但你必須在 go 文件中以字符串形式編寫 html。我假設你已經正確設置了 Go 開發環境。若是沒有,請參照這裏:https://golang.org/doc/code.html併發

步驟二:建立模板

該模板是一段很是簡單的 HTML,但你能夠自定義。先忽略 .Name,咱們稍後再看。oop

步驟三:GO!

一、添加必要的包

當你閱讀到這裏時,你就應該知道爲何咱們須要這些。網站

二、登陸 Gmail

第 14 行至第 16 行: 我從以前設置的環境變量中獲取了 Gmail 賬戶的用戶名和密碼。使用 smtp 包的 PlaneAuth 方法配合 email 服務器的用戶名、密碼和主機名來登陸。3d

三、解析模板並設置 email

第 20 行至第 26 行: 首先經過解析 html 來建立一個模板,而後把它存儲在一個變量 t 中(稍後再用)。而後聲明一個 bytes.Buffer 用於保存 email 的主題、header 和正文(自定義 html)。我發現使用 bytes.Buffer 類型比網上解決方案中使用的其餘類型更加靈活。fmt 包中的 Sprintf 是一個返回通過格式化處理的字符串的便捷方法。你可使用它來返回包含 email 主題和 header 的字符串。而後將該字符串轉換爲字節數組,並使用 Write 方法寫入字節緩衝區。到目前爲止,字節緩衝區包含了主題和 header。接下來咱們再補充一下。注意:像 HTTP 同樣,你必須在 header 以後添加兩行新行。指針

四、填充數據模板併發送 email

第 28 行至第 37 行: 而後咱們須要執行該模板,第一個參數必須實現 io.Writer 接口。因爲 bytes.Buffer 類型實現了 io.Writer 接口,咱們能夠經過傳入一個指向 body 變量的指針來使用它。爲何咱們使用指向 body 而不是該值的指針,這與 Go 如何實現接口有關,你能夠在文檔中獲取更多信息。第二個參數包含咱們想要傳入的模板(html)數據。還記得 HTML 中的 .Name 麼?那就是模板的數據。. 是咱們的結構體,Name 指的是屬性。不要對 struct 語法感到困惑,我只是在一條語句中聲明告終構體並初始化它。code

最後,使用 SendMail 方法,傳入主機地址、端口、以前建立的 Auth 類型、from 字段字符串和包含要發送 email 的地址的字符串數組。據我所知,from 字段字符串什麼都不作。也許它對其餘 email 服務器有用?

若是你想了解有關 smtp 包的更多信息,這是文檔的連接。你還能夠在這裏閱讀關於 text/template 包的介紹。我知道咱們使用了 html/template 包,但在 godocs 中,template 的實現細節在 text/template 的文檔中。

譯者注

文末提到的 from 字段指定是 email 中的發件人

相關文章
相關標籤/搜索