zoukankan      html  css  js  c++  java
  • Golang:使用自定义模板发送邮件

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

    几周前,我开始为一个证券投资组合网站工作。虽然我只能使用 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 语法感到困惑,我只是在一条语句中声明了结构体并初始化它。

    最后,使用 SendMail 方法,传入主机地址、端口、之前创建的 Auth 类型、from 字段字符串和包含要发送 email 的地址的字符串数组。据我所知,from 字段字符串什么都不做。也许它对其他 email 服务器有用?

    如果你想了解有关 smtp 包的更多信息,这是文档的链接。你还可以在这里阅读关于 text/template 包的介绍。我知道我们使用了 html/template 包,但在 godocs 中,template 的实现细节在 text/template 的文档中。

    译者注

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

  • 相关阅读:
    高斯消元学习
    HDU 4596 Yet another end of the world(解一阶不定方程)
    Codeforces Round #318 div2
    HDU 4463 Outlets(一条边固定的最小生成树)
    HDU 4458 Shoot the Airplane(计算几何 判断点是否在n边形内)
    HDU 4112 Break the Chocolate(简单的数学推导)
    HDU 4111 Alice and Bob (博弈)
    POJ 2481 Cows(线段树单点更新)
    HDU 4288 Coder(STL水过)
    zoj 2563 Long Dominoes
  • 原文地址:https://www.cnblogs.com/oopsguy/p/7670236.html
Copyright © 2011-2022 走看看