Go语言库系列之email
导读
大家好我是平也,今天跟大家介绍一款用来发送邮件的Go语言库email,目前星星1.3k,非常好用。
极速上手
准备工作
初始化项目
go get github.com/jordan-wright/email
本示例项目结构
.
├── go.mod
├── go.sum
└── main.go
开启邮箱SMTP服务,以163邮箱为例,需要先登录到邮箱后台点击开启按钮,在发送完短信之后,会获取到一个授权码,将授权码保存,后面需要用到。
代码示例
首先配置好邮件内容
e := email.NewEmail()
e.From = "平也<pingyeaa@163.com>"
e.To = []string{"602588122@qq.com"}
e.Subject = "发现惊天大秘密!"
e.Text = []byte("平也好帅好有智慧哦~")
- From:发件人邮箱,格式为“名称+<邮箱>”,也可以直接写邮箱,默认显示的发件人为@符号前的名称
- To:收件人邮箱地址
- Subject:邮件标题
- Text:邮件正文
调用Send方法发送邮件,第一个参数是你的发件人邮箱的SMTP域名+端口号,第二个参数用于身份认证
e.Send("smtp.163.com:25", smtp.PlainAuth("", "pingyeaa@163.com", "<你的密码>", "smtp.163.com"))
smtp.PlainAuth
- 参数1:通常,identity应该是空字符串,以用作用户名。
- 参数2:用户名
- 参数3:密码,如果拿到了授权码,则填写授权码
- 参数4:服务器地址,163的地址是smtp.163.com,其他平台可自行查看
完整代码如下
package main
import (
"net/smtp"
"github.com/jordan-wright/email"
)
func main() {
e := email.NewEmail()
//e.From = "pingyeaa@163.com"
e.From = "平也 <pingyeaa@163.com>"
e.To = []string{"xxxxxx@qq.com"}
e.Subject = "发现惊天大秘密!"
e.Text = []byte("平也好帅好有智慧哦~")
err := e.Send("smtp.163.com:25", smtp.PlainAuth("", "pingyeaa@163.com", "KQHQCZSXQWPDZYRF", "smtp.163.com"))
if err != nil {
panic(err)
}
}
拓展
CC与BCC
CC全称是Carbon Copy,意为抄送,BCC全称Blind Carbon Copy,意为暗抄送,收件人看不到被暗抄送给了谁。
e := email.NewEmail()
e.Cc = []string{"xxxxxxx@qq.com"}
e.Bcc = []string{"xxxxxxx@qq.com"}
另一种初始化方式
可以实例化的时候直接赋值
e := &email.Email{
From: "平也 <pingyeaa@163.com>",
To: []string{"xxxxxxx@qq.com"},
Subject: "发现惊天大秘密!",
Text: []byte("平也好帅好有智慧哦~"),
}
发送附件
发送附件非常简单,直接传入文件名即可
e.AttachFile("attachment.txt")
也可以调用Attach自行实现附件发送,AttachFile其实就是对Attach的封装
func (e *Email) AttachFile(filename string) (a *Attachment, err error) {
f, err := os.Open(filename)
if err != nil {
return
}
defer f.Close()
ct := mime.TypeByExtension(filepath.Ext(filename))
basename := filepath.Base(filename)
return e.Attach(f, basename, ct)
}
连接池
由于频繁发送邮件会不断的与SMTP服务器建立连接,比较影响性能,所以email提供了连接池的功能
auth := smtp.PlainAuth("", "pingyeaa@163.com", "<你的密码>", "smtp.163.com")
p, _ := email.NewPool("smtp.163.com:25", 4, auth)
创建成功后,就可以借助连接池来发送邮件
e := email.NewEmail()
e.From = "平也 <pingyeaa@163.com>"
e.To = []string{"xxxxxx@qq.com"}
e.Subject = "发现惊天大秘密!"
e.Text = []byte("平也好帅好有智慧哦~")
p.Send(e, 10*time.Second)
Go语言库代码示例,欢迎star
https://github.com/pingyeaa/golang-examples
感谢大家的观看,如果觉得文章对你有所帮助,欢迎关注公众号「平也」,聚焦Go语言与技术原理。
Go语言库系列之email的更多相关文章
- Go语言库系列之aurora
背景介绍 今天跟大家推荐一款可以给终端输出上色的工具--aurora. 极速上手 准备工作 初始化项目 go mod init aurora 演示项目结构 . ├── go.mod ├── go.su ...
- Go语言库系列之dotsql
导读:能单独拎出SQL文件的某一行或几行执行,是不是非常有趣?今天我们来介绍一下这个有意思的库--dotsql. 背景介绍 dotsql不是ORM,也不是SQL查询语句的构建器,而是可以在一个SQL文 ...
- Go语言库系列之flag
背景 终端(命令行)操作是程序员的必备技能,但是你知道怎么通过golang制作出如下命令吗? $ flag girl -h Usage of girl: -height int 身高 (default ...
- ElasticSearch 2 (21) - 语言处理系列之单词识别
ElasticSearch 2 (21) - 语言处理系列之单词识别 摘要 一个英语单词相对容易识别:因为英语单词是被空格或(某些)标点符号隔开的.但在英语中也有反例:you're 这个词是一个单词还 ...
- ElasticSearch 2 (20) - 语言处理系列之如何开始
ElasticSearch 2 (20) - 语言处理系列之如何开始 摘要 Elasticsearch 配备了一组语言分析器,为世界上大多数常见的语言提供良好的现成基础支持. 阿拉伯语.亚美尼亚语,巴 ...
- 【Go语言入门系列】Go语言工作目录介绍及命令工具的使用
[Go语言入门系列]前面的文章: [保姆级教程]手把手教你进行Go语言环境安装及相关VSCode配置 [Go语言入门系列](八)Go语言是不是面向对象语言? [Go语言入门系列](九)写这些就是为了搞 ...
- Linux C C语言库的创建和调用
C语言库的创建和调用 简介: 假如,你有一个庞大的工程,代码量达到数百兆甚至是数G,你经常会遇到好多重复或常用的地方.每次使用到这些地方时如果都重新写一份基本相同的代码,这当然可以,不过这样会大大地降 ...
- R语言数据分析系列六
R语言数据分析系列六 -- by comaple.zhang 上一节讲了R语言作图,本节来讲讲当你拿到一个数据集的时候怎样下手分析,数据分析的第一步.探索性数据分析. 统计量,即统计学里面关注的数据集 ...
- [iOS]C语言知识点系列视频
C语言知识点系列视频 目录 C语言技术视频-01-变量的定义 C语言技术视频-02-程序分支结构(if...else) C语言技术视频-03-程序分支结构(switch) C语言技术视频-04-程序循 ...
随机推荐
- 在centos7使用docker下搭建elasticsearch集群
一 .docker的安装 https://www.cnblogs.com/ghostdot/p/12410242.html 二.创建相关映射文件 cd /home/ mkdir node cd nod ...
- Tomcat8优化--Apache JMeter测试
一.部署测试java web项目(压力测试环境搭建) 1.mysql环境 #切换到mysql目录 cd /usr/local/mysql #查看mysql环境 rpm -qa | grep -i my ...
- 安装msyql报错——error: Failed dependencies
报错原因: 1.存在两个版本的msyql-community-release. 解决方法: 1.将不要的哪个进行去除,使用命令: rpm -e --nodeps mysql80-community-r ...
- hadoop HDFS扩容
1.纵向扩容(添加硬盘) 1.1 添加硬盘 确定完成添加,运行 lsblk 查看硬盘使用情况 1.2 硬盘分区 fdisk /dev/sdb #对新硬盘sdb进行分区 m 帮助 n 添加一个分区 p ...
- django数据库分库migrate
最近在研究微服务和分布式,设计到了数据库分库,记录一下 首先,创建多个数据库,如果是已经生成的数据库,可以分库,这里我是新创建的项目,刚好可以用来尝试 我是用docker创建的mysql数据库容器 拉 ...
- ADO.NET连接数据库DBHelper工具类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- CSS核心概念之盒子模型
盒子模型(Box Model) 关于更多CSS核心概念的文章请关注GitHub--CSS核心概念. 当对一个文档进行布局的时候,浏览器的渲染引擎会根据标准之一的 CSS 基础框盒模型(CSS basi ...
- go源码分析(五) 获取函数名和调用者的函数名
参考资料 实现代码保存在我的github // input flag 1:FunName 2:CallerFunName func GetFuncName(flag int) string { ...
- python飞机大战简单实现
小游戏飞机大战的简单代码实现: # 定义敌机类 class Enemy: def restart(self): # 重置敌机的位置和速度 self.x = random.randint(50, 400 ...
- 微商贴吧企业新浪微博怎么找客户_怎么做好seo
写的几篇文章对于seo的引流量方面的 怎么做好网络seo优化之SEO项目团队组建 品牌营销_中小企业网络推广的办法 微商怎么引流客源?微商没有客户的解决办法?下 微商怎么引流客源?微商没有客户的解决办 ...