GoLang 中发送 email 邮件
时间:2022-07-28
本文章向大家介绍GoLang 中发送 email 邮件,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
方法 1,使用官方的 net/smtp
库
package main
import (
"log"
"net/smtp"
)
const (
SMTPHost = "smtp.gmail.com"
SMTPPort = ":587"
SMTPUsername = "xxx@gmail.com"
SMTPPassword = "xxxx"
)
func sendEmail(receiver string) {
auth := smtp.PlainAuth("", SMTPUsername, SMTPPassword, SMTPHost)
msg := []byte("Subject: 这里是标题内容rnrn" + "这里是正文内容rn")
err := smtp.SendMail(SMTPHost+SMTPPort, auth, SMTPUsername, []string{receiver}, msg)
if err != nil {
log.Fatal("failed to send email:", err)
}
}
func sendHTMLEmail(receiver string, html []byte) {
auth := smtp.PlainAuth("", SMTPUsername, SMTPPassword, SMTPHost)
msg := append([]byte("Subject: 这里是标题内容rn"+
"MIME-version: 1.0;nContent-Type: text/html; charset="UTF-8";rnrn"),
html...)
err := smtp.SendMail(SMTPHost+SMTPPort, auth, SMTPUsername, []string{receiver}, msg)
if err != nil {
log.Fatal("failed to send email:", err)
}
}
func main() {
sendHTMLEmail("接受者@gmail.com", []byte("<html><h2>这是网页内容</h2></html>"))
}
方法2. 使用 jordan-wright 库
package main
import (
"log"
"fmt"
"net/smtp"
"github.com/jordan-wright/email"
)
const (
SMTPHost = "smtp.gmail.com"
SMTPPort = ":587"
SMTPUsername = "xxx@gmail.com"
SMTPPassword = "xxxx"
)
func sendEmail(receiver string) {
auth := smtp.PlainAuth("", SMTPUsername, SMTPPassword, SMTPHost)
e := &email.Email{
From: fmt.Sprintf("发送者名字<%s>", SMTPUsername),
To: []string{receiver},
Subject: "这里是标题内容",
Text: []byte("这里是正文内容"),
}
err := e.Send(SMTPHost+SMTPPort, auth)
if err != nil {
log.Fatal(err)
}
}
func sendHTMLEmail(receiver string, html []byte) {
auth := smtp.PlainAuth("", SMTPUsername, SMTPPassword, SMTPHost)
e := &email.Email{
From: fmt.Sprintf("发送者名字<%s>", SMTPUsername),
To: []string{receiver},
Subject: "这里是标题内容",
HTML: html,
}
err := e.Send(SMTPHost+SMTPPort, auth)
if err != nil {
log.Fatal(err)
}
}
func main() {
sendHTMLEmail("接受者@gmail.com", []byte("<html><h2>这是网页内容</h2></html>"))
}
方法3. 使用 jordan-wright 库的 Pool
package main
import (
"log"
"fmt"
"time"
"net/smtp"
"github.com/jordan-wright/email"
)
const (
SMTPHost = "smtp.gmail.com"
SMTPPort = ":587"
SMTPUsername = "xxx@gmail.com"
SMTPPassword = "xxxx"
MaxClient = 5
)
var pool *email.Pool
func sendEmail(receiver string) {
var err error
if pool == nil {
pool, err = email.NewPool(SMTPHost+SMTPPort, MaxClient, smtp.PlainAuth("", SMTPUsername, SMTPPassword, SMTPHost))
if err != nil {
log.Fatal(err)
}
}
e := &email.Email{
From: fmt.Sprintf("发送者名字<%s>", SMTPUsername),
To: []string{receiver},
Subject: "这里是标题内容",
Text: []byte("这里是正文内容"),
}
err = pool.Send(e, 5 * time.Second)
if err != nil {
log.Fatal(err)
}
}
对比总结
如果只是发送少量邮件,可以使用前两种方法。但是如果需要一次性发送较多邮件,需要使用第三种方法,即连接池。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 牛逼!力挺一款实用的 Linux 资源监视工具
- 浙大版《C语言程序设计(第3版)》题目集 练习4-11 统计素数并求和
- 浙大版《C语言程序设计(第3版)》题目集 习题4-1 求奇数和
- Kotlin 使用DSL构建语法结构 看这一篇就够了~
- 浙大版《C语言程序设计(第3版)》题目集 习题4-2 求幂级数展开的部分和
- 2020 年 9 月编程语言排行榜
- 浙大版《C语言程序设计(第3版)》题目集 习题4-3 求分数序列前N项和
- 浙大版《C语言程序设计(第3版)》题目集 习题4-4 特殊a串数列求和
- 一个可能让你的页面渲染速度提升数倍的CSS属性
- 浙大版《C语言程序设计(第3版)》题目集 习题4-6 水仙花数
- 浙大版《C语言程序设计(第3版)》题目集 习题4-7 最大公约数和最小公倍数
- 高危漏洞!黑客可利用sudo获得 root权限
- 浙大版《C语言程序设计(第3版)》题目集 习题4-8 高空坠球
- 浙大版《C语言程序设计(第3版)》题目集 习题4-10 猴子吃桃问题
- 6种展示代码的绝佳方式