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 中的发件人

相关文章
相关标签/搜索