Golang 语言怎么使用 gomail 库发送邮件?

简介: Golang 语言怎么使用 gomail 库发送邮件?

01

介绍


我们在项目开发中,经常会遇到发送邮件的需求,比如给开发人员发送报警邮件,给用户发送优惠券或兑换码等。


Gomail 是发送电子邮件的简单高效的包。它已经过充分测试和记录。Gomail 只能使用 SMTP 服务器发送电子邮件。但是该 API 灵活,可以轻松实现使用本地 Postfix,API 等发送电子邮件的其他方法。


它使用 gopkg.in 进行了版本控制,因此保证每个版本都不会存在向后不兼容的更改。它需要 Go 1.2 或更高版本。对于 Go 1.5,不使用外部依赖项。


02

gomail 包含的特性


  • 附件
  • 嵌入图片
  • HTML 和文本模板
  • 特殊字符的自动编码
  • SSL 和 TLS
  • 使用相同的 SMTP 连接发送多封电子邮件


03

gomail 安装


使用 go get 安装:

go get gopkg.in/gomail.v2


04

gomail 使用


准备邮箱服务:

如果想要使用 gomail 开发发送邮件的功能,需要准备邮箱服务,除了自建SMTP 服务之外,几乎所有邮箱运营商都支持 SMTP 服务,我们以网易 126 邮箱为例,准备一个网易126 邮箱账号,登录 PC 版邮箱,找到设置,开启 SMTP 服务并记住密码。


示例代码:

package main
import "gopkg.in/gomail.v2"
func main() {
 m := gomail.NewMessage()
 m.SetHeader("From", "xxx@126.com")
 m.SetHeader("To", "xxx@qq.com", "xxx@88.com")
 m.SetAddressHeader("Cc", "xxx@163.com", "Dan")
 m.SetHeader("Subject", "Hello!")
 m.SetBody("text/html", "Hello <b>Bob</b> and <i>Cora</i>!")
 // m.Attach("/home/Alex/lolcat.jpg")
 d := gomail.NewDialer("smtp.126.com", 25, "xxx@126.com", "Your Password")
 // Send the email to Bob, Cora and Dan.
 if err := d.DialAndSend(m); err != nil {
  panic(err)
 }
}


05

常见问题


x509: certificate signed by unknown authority

如果收到此错误,则表示运行 Gomail 的客户端认为 SMTP 服务器使用的证书无效。


快速的解决方法是,您可以使用 SetTLSConfig 绕过服务器证书链和主机名的验证。


package main
import (
 "crypto/tls"
 "gopkg.in/gomail.v2"
)
func main() {
 d := gomail.NewDialer("smtp.example.com", 587, "user", "123456")
 d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
    // Send emails using d.
}


但是请注意,这是不安全的,不应在生产中使用。


06

总结


本文主要是给大家介绍了 Golang 语言中一个非常好用的发送邮件的三方库 gomail,不仅介绍了 gomail 的特性和安装使用方法,还列举了一个常见问题和解决方法。限于篇幅,没有详细介绍 gomail 提供的所有方法,感兴趣的读者可以通过阅读文档深入了解。





目录
相关文章
|
2月前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
110 4
Golang语言之管道channel快速入门篇
|
2月前
|
Go
Golang语言文件操作快速入门篇
这篇文章是关于Go语言文件操作快速入门的教程,涵盖了文件的读取、写入、复制操作以及使用标准库中的ioutil、bufio、os等包进行文件操作的详细案例。
66 4
Golang语言文件操作快速入门篇
|
2月前
|
Go
Golang语言之gRPC程序设计示例
这篇文章是关于Golang语言使用gRPC进行程序设计的详细教程,涵盖了RPC协议的介绍、gRPC环境的搭建、Protocol Buffers的使用、gRPC服务的编写和通信示例。
101 3
Golang语言之gRPC程序设计示例
|
2月前
|
安全 Go
Golang语言goroutine协程并发安全及锁机制
这篇文章是关于Go语言中多协程操作同一数据问题、互斥锁Mutex和读写互斥锁RWMutex的详细介绍及使用案例,涵盖了如何使用这些同步原语来解决并发访问共享资源时的数据安全问题。
86 4
|
13天前
|
存储 Cloud Native Shell
go库介绍:Golang中的Viper库
Viper 是 Golang 中的一个强大配置管理库,支持环境变量、命令行参数、远程配置等多种配置来源。本文详细介绍了 Viper 的核心特点、应用场景及使用方法,并通过示例展示了其强大功能。无论是简单的 CLI 工具还是复杂的分布式系统,Viper 都能提供优雅的配置管理方案。
|
2月前
|
Go 调度
Golang语言goroutine协程篇
这篇文章是关于Go语言goroutine协程的详细教程,涵盖了并发编程的常见术语、goroutine的创建和调度、使用sync.WaitGroup控制协程退出以及如何通过GOMAXPROCS设置程序并发时占用的CPU逻辑核心数。
50 4
Golang语言goroutine协程篇
|
2月前
|
Prometheus Cloud Native Go
Golang语言之Prometheus的日志模块使用案例
这篇文章是关于如何在Golang语言项目中使用Prometheus的日志模块的案例,包括源代码编写、编译和测试步骤。
51 3
Golang语言之Prometheus的日志模块使用案例
|
1月前
|
前端开发 中间件 Go
实践Golang语言N层应用架构
【10月更文挑战第2天】本文介绍了如何在Go语言中使用Gin框架实现N层体系结构,借鉴了J2EE平台的多层分布式应用程序模型。文章首先概述了N层体系结构的基本概念,接着详细列出了Go语言中对应的构件名称,包括前端框架(如Vue.js、React)、Gin的处理函数和中间件、依赖注入和配置管理、会话管理和ORM库(如gorm或ent)。最后,提供了具体的代码示例,展示了如何实现HTTP请求处理、会话管理和数据库操作。
30 0
|
2月前
|
JSON Go 数据格式
Golang语言结构体链式编程与JSON序列化
这篇文章是关于Go语言中结构体链式编程与JSON序列化的教程,详细介绍了JSON格式的基本概念、结构体的序列化与反序列化、结构体标签的使用以及如何实现链式编程。
38 4
|
2月前
|
Go
Golang语言结构体(struct)面向对象编程进阶篇(封装,继承和多态)
这篇文章是关于Go语言中结构体(struct)面向对象编程进阶篇的教程,涵盖了Go语言如何实现封装、继承和多态,以及结构体内存布局的相关概念和案例。
142 4