技术标签: golang挖坑记 smtp golang go
在 go
语言里想要发送smtp
邮件是非常容易的事情,官方自带 net/smtp
包可以使用,不过这里介绍的是另一个包:gomail ,不是因为别的,主要是上手简单。
import (
"gopkg.in/gomail.v2"
)
// 初始化
m := gomail.NewMessage()
// 发邮件的地址
m.SetHeader("From", "[email protected]")
// 给谁发送,支持多个账号
m.SetHeader("To", "[email protected]", "[email protected]")
// 抄送谁
m.SetAddressHeader("Cc", "[email protected]", "Dan")
// 邮件标题
m.SetHeader("Subject", "Hello!")
// 邮件正文,支持 html
m.SetBody("text/html", "Hello <b>Bob</b> and <i>Cora</i>!")
// 附件
m.Attach("/home/Alex/lolcat.jpg")
// stmp服务,端口号,发送邮件账号,发送账号密码
d := gomail.NewDialer("smtp.example.com", 587, "user", "123456")
// Send the email to Bob, Cora and Dan.
if err := d.DialAndSend(m); err != nil {
panic(err)
}
整个过程大致如上一般简单。
不过有时候你可能不需要账号密码鉴权,那么你可以:
m := gomail.NewMessage()
m.SetHeader("From", "[email protected]")
m.SetHeader("To", "[email protected]")
m.SetHeader("Subject", "Hello!")
m.SetBody("text/plain", "Hello!")
// 不需要邮件验证
d := gomail.Dialer{
Host: "localhost", Port: 587}
if err := d.DialAndSend(m); err != nil {
panic(err)
}
gomail.NewMessage(gomail.SetEncoding(gomail.Base64))
gomail
内置三种可选编码,默认为 QuotedPrintable
方式,不过这已经足够日常使用。如果需要修改,请参考上述配置。
一般来说,当我们申请好了一个smtp服务,我们如果快速测试该smtp服务是否可用呢?答案是:使用 telnet
命令工具,请参考如下步骤:
telnet
输入的 smtp
sever
地址和端口号连接上 stmp
服务器,回车
telnet smtp.example.com 25
发送 HELO
指令,并输入授权的 domain
或 ip
,回车
helo allow.smtp.com
填写 From
发送邮件账号,回车
MAIL FROM:[email protected]
填写收件人账号,回车
RCPT TO:[email protected]
填写邮件内容,输入 data
指令,回车
data
编写 Subject
标题,回车
Subject:test email
填写正文内容,回车
some data
结束邮件,立即发送,输入:英文句号 + 回车
.
如果希望退出 telnet
请使用 quit
关键字指令:
quit
执行上述的每一步操作,smtp
服务会返回响应的状态码,状态码及其含义整理如下:
回复代码开头为 | 含义 |
---|---|
2.* | 发送成功。远程服务器已准备好接受下一个命令。 |
3.* | 命令已接受,但远程服务器需要更多信息才能完成此操作。 |
4.* | 由于可能是临时命令的原因,命令未被远程服务器接受。 |
5.* | 由于不可恢复的原因,命令未被远程服务器接受。 |
作者:猿谋人
博客:https://yuankan.co
文章浏览阅读1.4k次,点赞3次,收藏13次。【代码】使用cesium primitive api绘制三维插值图。_cesium 插值点
文章浏览阅读978次,点赞3次,收藏21次。该项目是浙江大学地理空间数据库课程作业8:空间分析中,使用 flask + pyecharts搭建的简单新冠肺炎疫情数据可视化交互分析平台的一部分,完整的实现包含疫情数据获取、态势感知、预测分析、舆情监测等任务;包含完整代码、数据集和实现的github地址: https://github.com/yunwei37/COVID-19-NLP-vis项目分析报告已部署到网页端,可点击 http://flask.yunwei123.tech/ 进行查看,数据已更新到6.17本项目采用flask作为_疫情舆情分析代码
文章浏览阅读254次。详细请参考:https://www.cnblogs.com/Neeo/articles/11212374.html1、元组的基本操作1>创建元组Python中,元组(tuple)用一对小括号()表示,元组内的各元素以逗号分隔。t = ()print(type(t)) # <type 'tuple'>t1 = ('name', )print(t1) ..._tuple元祖for循环取值
文章浏览阅读860次。关于c语言创建dll文件及dll文件的调用近来又有人在群里问如何用c语言编制dll文件(动态链接库)。原来没有对这个问题太在意过,也没有尝试过任何解决方案,毕竟原来我是用vb的(现在用.net),做个dll只不过是点选一下建立activeX dll工程的图标而已。今天在网上与朋友聊天,看了他指给我的几个几个文件,用MingW将C程序编译成dll文件的例子,我恍然大悟,原来讲C程序编译成dll文件只..._keil c语言 生成dll
文章浏览阅读6.8k次,点赞11次,收藏111次。一、背景介绍BP神经网络是一类多层的前馈神经网络。它的名字源于在网络训练的过程中,调整网络的权值的算法是误差的反向传播的学习算法,即为BP学习算法。BP神经网络是人工神经网络中应用广泛的算法,但依然存在着一些缺陷,例如学习收敛速度太慢、不能保证收敛到全局最小点、网络结构不易确定等。另外,网络结构、初始连接权值和阈值的选择对网络训练的影响很大,但是又无法准确获得,针对这些特点可以采用遗传算法对神经网络进行优化。二、算法流程创建网络;确定网络的初始权重值和阈值,对其进行编码得到初始种群;while_遗传算法优化 bp 染色体
文章浏览阅读316次。Sentinel(哨兵)进程是用于监控Redis集群中Master主服务器工作的状态在Master主服务器发生故障的时候,可以实现Master和Slave服务器的切换,保证系统的高可用(HA)其已经被集成在redis2.6+的版本中,Redis的哨兵模式到了2.8版本之后就稳定了下来。......_redis 6 哨兵
文章浏览阅读6.7k次,点赞3次,收藏17次。一、Json字符串和Json对象定义:1、Json字符串:所谓字符串:单引号或者双引号引起来,是一个String类型的字符串:如下:var person='{"name":"shily","sex":"女","age":"23"}';//json字符串console.log(person)console.log(person.name)console.log(typeof person) 2、Json对象:最显著的特征:对象的值可以用 “对象.属性” 进行访问,_json字符串数组
文章浏览阅读718次。CentOS 7:ip link set interface_name up 或 ip link set interface_name down。Ubuntu:ifconfig interface_name up 或 ifconfig interface_name down。CentOS 7:编辑 /etc/sysconfig/network-scripts/ifcfg-eth0 文件。Ubuntu:编辑 /etc/network/interfaces 文件。_ubuntu 命令跟centos
文章浏览阅读652次。jpegsr9e windows vs2019生成方法,以及库下载_jpeg library error vs2019
文章浏览阅读647次。总的来说,华为Mate 60/Pro系列手机的高速网速表现引起了广泛的关注,这也是消费者对该系列手机购买热情高涨的一个重要因素。可以看出,华为Mate 60/Pro系列手机的网速表现非常出色,这也是消费者购买该系列手机的一个重要原因。此前,华为Mate 60 Pro的供应量已经增至1500万至1700万台,而最新消息称,华为Mate 60 Pro和Mate 60 Pro+的出货量甚至已上调至2000万台。目前,在中国市场上,手机竞争愈发激烈,不仅华为Mate 60系列,其他品牌的手机也都受到了高温的迎接。_华为mate60pro+核实网络
文章浏览阅读7.1k次。公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解。话题:access怎样利用出生日期计算年龄呀!回答:lt;%set rs = server.createobject("adodb.recordset") curid=request("id") sql = "UPDATE pany SET a_num=a_num+1,day_count=day_count+1 WHERE day_lda..._access出生年份表达式
文章浏览阅读75次。Python内置函数(1)——absPython内置函数(2)——divmodPython内置函数(3)——maxPython内置函数(4)——minPython内置函数(5)——powPython内置函数(6)——roundPython内置函数(7)——sumPython内置函数(8)——bool...