go语言使用smtp发送邮件_go的quotedprintable-程序员宅基地

技术标签: 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 方式,不过这已经足够日常使用。如果需要修改,请参考上述配置。

使用telnet测试smtp服务

一般来说,当我们申请好了一个smtp服务,我们如果快速测试该smtp服务是否可用呢?答案是:使用 telnet 命令工具,请参考如下步骤:

01:

telnet 输入的 smtp sever 地址和端口号连接上 stmp 服务器,回车

telnet smtp.example.com 25

02:

发送 HELO 指令,并输入授权的 domainip,回车

helo allow.smtp.com

03:

填写 From 发送邮件账号,回车

MAIL FROM:[email protected]

04:

填写收件人账号,回车

RCPT TO:[email protected]

05:

填写邮件内容,输入 data 指令,回车

data

06:

编写 Subject 标题,回车

Subject:test email

07:

填写正文内容,回车

some data

08:

结束邮件,立即发送,输入:英文句号 + 回车

.

如果希望退出 telnet 请使用 quit 关键字指令:

quit

执行上述的每一步操作,smtp 服务会返回响应的状态码,状态码及其含义整理如下:

回复代码开头为 含义
2.* 发送成功。远程服务器已准备好接受下一个命令。
3.* 命令已接受,但远程服务器需要更多信息才能完成此操作。
4.* 由于可能是临时命令的原因,命令未被远程服务器接受。
5.* 由于不可恢复的原因,命令未被远程服务器接受。

作者:猿谋人
博客:https://yuankan.co

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/imgodsee/article/details/105209199

智能推荐

使用cesium primitive api绘制三维插值图,热力图_cesium 插值点-程序员宅基地

文章浏览阅读1.4k次,点赞3次,收藏13次。【代码】使用cesium primitive api绘制三维插值图。_cesium 插值点

flask + pyecharts 疫情数据分析 搭建交互式动态可视化疫情趋势分析、舆情监测平台(附代码实现)_疫情舆情分析代码-程序员宅基地

文章浏览阅读978次,点赞3次,收藏21次。该项目是浙江大学地理空间数据库课程作业8:空间分析中,使用 flask + pyecharts搭建的简单新冠肺炎疫情数据可视化交互分析平台的一部分,完整的实现包含疫情数据获取、态势感知、预测分析、舆情监测等任务;包含完整代码、数据集和实现的github地址: https://github.com/yunwei37/COVID-19-NLP-vis项目分析报告已部署到网页端,可点击 http://flask.yunwei123.tech/ 进行查看,数据已更新到6.17本项目采用flask作为_疫情舆情分析代码

python之09-tuple元组-程序员宅基地

文章浏览阅读254次。详细请参考:https://www.cnblogs.com/Neeo/articles/11212374.html1、元组的基本操作1>创建元组Python中,元组(tuple)用一对小括号()表示,元组内的各元素以逗号分隔。t = ()print(type(t)) # <type 'tuple'>t1 = ('name', )print(t1) ..._tuple元祖for循环取值

c语言程序怎样生产dll文件,关于c语言创建dll文件及dll文件的调用-程序员宅基地

文章浏览阅读860次。关于c语言创建dll文件及dll文件的调用近来又有人在群里问如何用c语言编制dll文件(动态链接库)。原来没有对这个问题太在意过,也没有尝试过任何解决方案,毕竟原来我是用vb的(现在用.net),做个dll只不过是点选一下建立activeX dll工程的图标而已。今天在网上与朋友聊天,看了他指给我的几个几个文件,用MingW将C程序编译成dll文件的例子,我恍然大悟,原来讲C程序编译成dll文件只..._keil c语言 生成dll

【学习笔记】基于遗传算法的BP神经网络优化算法_遗传算法优化 bp 染色体-程序员宅基地

文章浏览阅读6.8k次,点赞11次,收藏111次。一、背景介绍BP神经网络是一类多层的前馈神经网络。它的名字源于在网络训练的过程中,调整网络的权值的算法是误差的反向传播的学习算法,即为BP学习算法。BP神经网络是人工神经网络中应用广泛的算法,但依然存在着一些缺陷,例如学习收敛速度太慢、不能保证收敛到全局最小点、网络结构不易确定等。另外,网络结构、初始连接权值和阈值的选择对网络训练的影响很大,但是又无法准确获得,针对这些特点可以采用遗传算法对神经网络进行优化。二、算法流程创建网络;确定网络的初始权重值和阈值,对其进行编码得到初始种群;while_遗传算法优化 bp 染色体

Redis6 主从复制及哨兵机制_redis 6 哨兵-程序员宅基地

文章浏览阅读316次。Sentinel(哨兵)进程是用于监控Redis集群中Master主服务器工作的状态在Master主服务器发生故障的时候,可以实现Master和Slave服务器的切换,保证系统的高可用(HA)其已经被集成在redis2.6+的版本中,Redis的哨兵模式到了2.8版本之后就稳定了下来。......_redis 6 哨兵

随便推点

二、Json对象、Json数组和Json字符串_json字符串数组-程序员宅基地

文章浏览阅读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字符串数组

Linux系统100条命令:关于Ubuntu和 CentOS 7 相同功能的不同的终端操作命令_ubuntu 命令跟centos-程序员宅基地

文章浏览阅读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

windows10下VS2019编译jpegsrc.v9e.tar.gz为lib静态库(已验证)_jpeg library error vs2019-程序员宅基地

文章浏览阅读652次。jpegsr9e windows vs2019生成方法,以及库下载_jpeg library error vs2019

重磅?华为 Mate60/Pro 系列网速实测结果公布,最高 1205.57 Mbps_华为mate60pro+核实网络-程序员宅基地

文章浏览阅读647次。总的来说,华为Mate 60/Pro系列手机的高速网速表现引起了广泛的关注,这也是消费者对该系列手机购买热情高涨的一个重要因素。可以看出,华为Mate 60/Pro系列手机的网速表现非常出色,这也是消费者购买该系列手机的一个重要原因。此前,华为Mate 60 Pro的供应量已经增至1500万至1700万台,而最新消息称,华为Mate 60 Pro和Mate 60 Pro+的出货量甚至已上调至2000万台。目前,在中国市场上,手机竞争愈发激烈,不仅华为Mate 60系列,其他品牌的手机也都受到了高温的迎接。_华为mate60pro+核实网络

access查找出生日期年份_access怎样利用出生日期计算年龄呀!-程序员宅基地

文章浏览阅读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出生年份表达式

python 内置函数-程序员宅基地

文章浏览阅读75次。Python内置函数(1)——absPython内置函数(2)——divmodPython内置函数(3)——maxPython内置函数(4)——minPython内置函数(5)——powPython内置函数(6)——roundPython内置函数(7)——sumPython内置函数(8)——bool...