Golang利用自定义模板发送邮件的方法详解

 更新时间:2017年10月12日 10:10:52   作者:Oopsguy  
这篇文章主要给大家介绍了关于Golang利用自定义模板发送邮件的方法,文中通过示例代码将实现的方法介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

前言

在几周前,我开始工作于一个证券投资组合网站。虽然我只能使用 React 完成整个网站,但我决定使用 Go 来创建一个可以处理某些任务(例如发送 email)的 API 服务器,相信这是一个很好的做法。

我其中的一个页面是一个 contact 页面,目前看起来像这样:

contact me

我想使用专门为此 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 中的发件人。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Go语言Elasticsearch数据清理工具思路详解

    Go语言Elasticsearch数据清理工具思路详解

    这篇文章主要介绍了Go语言Elasticsearch数据清理工具思路详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • Go语言集成开发环境之VS Code安装使用

    Go语言集成开发环境之VS Code安装使用

    VS Code是微软开源的一款编辑器,插件系统十分的丰富,下面介绍如何用VS Code搭建go语言开发环境,需要的朋友可以参考下
    2021-10-10
  • Go语言多人聊天室项目实战

    Go语言多人聊天室项目实战

    这篇文章主要为大家详细介绍了Go语言多人聊天室项目实战,实现单撩或多撩等多种功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • 详解go 动态数组 二维动态数组

    详解go 动态数组 二维动态数组

    这篇文章主要介绍了go 动态数组 二维动态数组,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Golang打印复杂结构体两种方法详解

    Golang打印复杂结构体两种方法详解

    在 Golang 语言开发中,我们经常会使用结构体类型,如果我们使用的结构体类型的变量包含指针类型的字段,我们在记录日志的时候,指针类型的字段的值是指针地址,将会给我们 debug 代码造成不便
    2022-10-10
  • Golang等多种语言转数组成字符串举例详解

    Golang等多种语言转数组成字符串举例详解

    今天写代码遇到数组转换成字符串操作,下面这篇文章主要给大家介绍了关于Golang等多种语言转数组成字符串的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Go语言调用其它程序并获得程序输出的方法

    Go语言调用其它程序并获得程序输出的方法

    这篇文章主要介绍了Go语言调用其它程序并获得程序输出的方法,实例分析了Go调用cmd程序的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • go实现限流功能示例

    go实现限流功能示例

    这篇文章主要为大家介绍了go实现限流功能示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Go语言学习之将mp4通过rtmp推送流媒体服务的实现方法

    Go语言学习之将mp4通过rtmp推送流媒体服务的实现方法

    对音视频一直是小白,决定沉下心来,好好研究一下音视频知识,下面这篇文章主要给大家介绍了关于Go语言学习之将mp4通过rtmp推送流媒体服务的实现方法,需要的朋友可以参考下
    2022-12-12
  • Go语言实现逐行读取和写入文件详解

    Go语言实现逐行读取和写入文件详解

    这篇文章主要介绍了如何使用go语言实现从输入文件中读取每行数据,然后将每行字段组合成SQL插入脚本,然后逐行写入另外一个空白文件中,有需要的可以参考下
    2024-01-01

最新评论