Golang:使用自訂模板發送郵件

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

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

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

我想使用專門為此 contact 表單申請的 Gmail 帳戶發送一封郵件。除了我以前用過 Javascript 寄送電子郵件的事實,我沒有特別選擇 Go。但為什麼不嘗試 Go 呢?我覺得 Go 很棒。

步驟一:建立必要的檔案

你只需要兩個檔案,一個 html 檔案和一個 go 檔案。它們可以放置在同一目錄中。只需確保您能正確地引用到 html 檔案即可。

注意:您甚至不需要 html 檔案,但您必須在 go 檔案中以字串形式編寫 html。我假設你的 Go 環境已經正確設定。如果沒有,請參照這裡:https://golang.org/doc/code.html

步驟二:建立模板

該模板是一段非常簡單的 HTML,而然您可以自訂。先忽略 .Name,我們稍後再回來。

步驟三:GO!

1、添加必要的包

當你閱讀時,您應該知道為什麼我們需要這些。

2、登入 Gmail

第 14 行至第 16 行: 我從之前設定的環境變數中擷取了 Gmail 帳戶的使用者名稱和密碼。 使用 smtp 包的 PlaneAuth 方法結合 email 伺服器的使用者名稱、密碼和主機名稱來登入。

3、解析模板並設定 email

第 20 行至第 26 行: 首先通過解析 html 來建立一個模板,然後把它儲存在一個變數 t 中(稍後再用)。然後聲明一個 bytes.Buffer 用於儲存 email 的 主題、header 和本文(自訂 html)。我發現使用 bytes.Buffer 類型比在其他線上解決方案中使用的其他類型更加靈活。fmt 包中的 Sprintf 是一個返回格式化字串的方便方法。您可以使用它來返回包含 email 主題和 header 的字串。然後將該字串轉換為位元組數組,並使用 Write 方法寫入位元組緩衝區。到目前為止,位元組緩衝區包含了主題和 header。 接下來我們再補充一下。注意:像 HTTP 一樣,您必須在 header 之後添加兩行新行。

4、填充資料範本並發送 email

第 28 行至第 37 行: 然後我們需要執行該模板,第一個參數必須實現 io.Writer 介面。由於 bytes.Buffer 類型實現了 io.Writer 介面,我們可以通過傳入一個指向 body 變數的指標來使用它。為什麼我們使用指向 body 而不是該值的指標與 Go 如何?介面有關,您可以在文檔中擷取更多資訊。第二個參數包含我們想要傳入的模板(html)資料。還記得 HTML 中的 .Name 嗎?那就是我們如何引用執行模板的資料。. 是我們的結構體,Name 指的是屬性。不要對 struct 文法感到困惑,我只是在一條語句中聲明了結構體並初始化它。在 HTML 中使用變數只是您在 Go 模板中可以做的事情之一。

最後,使用 SendMail 方法來帶上主機與連接埠、之前建立的 Auth 類型、from 欄位字串和包含要發送 email 的地址的字串數組。據我所知,from 欄位字串什麼都不做。也許它對其他 email 伺服器有用?

如果您想瞭解有關 smtp 包的更多資訊,這是指向文檔的連結。您還可以在這裡閱讀關於 text/template 包的內容。我知道我們使用了 html/template 包,但在 godocs 中,template 的實現細節在 text/template 的文檔中。

譯者注

文末提到的 from 欄位指定是 email 中的寄件者

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.