热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

这篇文章主要给大家介绍了关于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 中的发件人。

总结

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


推荐阅读
  • 本文csdn博客链接:http:blog.csdn.netscrescentarticledetails51135307本文qq空间链接:http:user.qzone.qq.com ... [详细]
  • 面试题系列:TCP UDP HTTP 的关系和区别
    面试题系列:TCPUDPHTTP的关系和区别,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 这篇文章给大家讲解如何利用dhtmlxGantt在服务器端集成数据。脚本数据保存如果您已初始化dataProcessor,则用户或以编程方式所做的任何更改都将自动 ... [详细]
  • 三小时掌握计算机网络基础(通俗易懂)
    目录1.网络层次划分2.OSI七层网络模型3.IP地址4.子网掩码及网络划分5.ARPRARP协议6.路由选择协议7.TCPIP协议8.UDP协议 9.DNS协议 ... [详细]
  • 2016年8月29日当初想的太简单~~~哎写在前面从3月份开始各大互联网类、游戏类、软件类等公司开始招暑期实习,9月份正式招聘,面临众多的工作选择和技术方向,我们不免有些眼花缭乱啊 ... [详细]
  • 由于php没有提供现成的smtp函数,却提供了一个功能不甚灵活的mail()函数,这个函数需要服务器配置上的支持,并且不支持smtp验证,在很多场合无法正常的工作,因此不建议使用。 ... [详细]
  • 适合小型网络环境的免费网络管理软件Intermapper
    InterMapper网络管理软件可支持监测5台以内的网络设备,特别适合安装使用在小型网络环境,可以实时了解网络运行状态和网络拓扑,支持多 ... [详细]
  • 使用gin改写“SectionBuildingRESTfulAPIs”第三方包需要提前准备的包有:“gopkg.ingin-gonicgin.v1”“gopkg.inmgo.v2” ... [详细]
  • 软测管理工具实践04
    一.今日任务——安装完成QC9.0进过几天的安装,终于把QC9.0成功的安装在了自己win7系统的电脑上。其中遇到的困难很多,首先是QC的版本问题&#x ... [详细]
  • Nginx: nginx介绍和安装
    1 Nginx简介1.1 概述1.1.1 历史来源Apache发展时间很长,作为世界第一大的服务器,有着开源、稳定、跨平台等优点。但是它不支持高并发,当遇到高并发的情况时,会导致服 ... [详细]
  • 攻击中东欧的间谍工具集20160714 反连 邮件-http隧道的后门
    图1在过去的一年里,ESET检测并分析了若干有针对性的进行间谍活动的恶意软件,被称作SBDH工具集。它使用了强大的过滤器,多种通信方式以及非常有意思的驻留技术。它的目的是从 ... [详细]
  • 局域网代理服务器如何搭建?哪些好处?
    代理服务器(ProxyServer)是指那些自己不能执行某种操作的计算机,通过一台服务器来执行该操作,该服务器即为代理服务器。是伴随着Internet应 ... [详细]
author-avatar
小白牛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有