电子邮件在日常工作中有很大用途,凡项目或任务,有邮件来往可避免扯皮背锅(是否背锅,取决于人,而非邮件)。
而在一些自动化的应用场合,也使用得广泛,特别是系统监控方面,如果在资源使用达到警戒线之前自动发邮件通知运维人员,能消除隐患于前期,而不至于临时临急去做善后方案。
对于多人协合(不管是不是异地)场合,邮件也有用武之地,当有代码或文档更新时,自动发邮件通知项目成员或领导,让各方人员知晓并及时更新(是否更新,取决于人,而非工具)。
说到发邮件,不得不提用程序的方式实现。笔者之前已经开通了腾讯免费企业邮箱,并关联自己的域名,自己注册了些邮箱来测试。

本文使用golang语言实现发送电子邮件。

golang拥有大量的库,非常方便使用。说到golang,不提不提笔者那段探索docker、k8s的岁月,这些项目都是用golang实现的,于是不可避免地要学习一下golang。但只限于“一下”而已。
实现

golang使用gomail来发送邮箱,参考一些资料,很容易实现功能。
源码文件goemail.go如下:

package goemailimport ("strings""github.com/go-gomail/gomail"
)type EmailParam struct {// ServerHost 邮箱服务器地址,如腾讯企业邮箱为smtp.exmail.qq.comServerHost string// ServerPort 邮箱服务器端口,如腾讯企业邮箱为465ServerPort int// FromEmail 发件人邮箱地址FromEmail string// FromPasswd 发件人邮箱密码(注意,这里是明文形式),TODO:如果设置成密文?FromPasswd string// Toers 接收者邮件,如有多个,则以英文逗号(“,”)隔开,不能为空Toers string// CCers 抄送者邮件,如有多个,则以英文逗号(“,”)隔开,可以为空CCers string
}// 全局变量,因为发件人账号、密码,需要在发送时才指定
// 注意,由于是小写,外面的包无法使用
var serverHost, fromEmail, fromPasswd string
var serverPort intvar m *gomail.Messagefunc InitEmail(ep *EmailParam) {toers := []string{}serverHost = ep.ServerHostserverPort = ep.ServerPortfromEmail = ep.FromEmailfromPasswd = ep.FromPasswdm = gomail.NewMessage()if len(ep.Toers) == 0 {return}for _, tmp := range strings.Split(ep.Toers, ",") {toers = append(toers, strings.TrimSpace(tmp))}// 收件人可以有多个,故用此方式m.SetHeader("To", toers...)//抄送列表if len(ep.CCers) != 0 {for _, tmp := range strings.Split(ep.CCers, ",") {toers = append(toers, strings.TrimSpace(tmp))}m.SetHeader("Cc", toers...)}// 发件人// 第三个参数为发件人别名,如"李大锤",可以为空(此时则为邮箱名称)m.SetAddressHeader("From", fromEmail, "")
}// SendEmail body支持html格式字符串
func SendEmail(subject, body string) {// 主题m.SetHeader("Subject", subject)// 正文m.SetBody("text/html", body)d := gomail.NewPlainDialer(serverHost, serverPort, fromEmail, fromPasswd)// 发送err := d.DialAndSend(m)if err != nil {panic(err)}
}

测试

测试文件goemail_test.go如下:

/*
安装依赖包:
go get github.com/go-gomail/gomail测试命令:
go test
*/
package goemailimport ("testing"
)func TestEmail(t *testing.T) {serverHost := "smtp.exmail.qq.com"serverPort := 465fromEmail := "cicd@latelee.org"fromPasswd := "1qaz@WSX"myToers := "li@latelee.org, latelee@163.com" // 逗号隔开myCCers := "" //"readchy@163.com"subject := "这是主题"body := `这是正文<br><h3>这是标题</h3>Hello <a href = "http://www.latelee.org">主页</a><br>`// 结构体赋值myEmail := &EmailParam {ServerHost: serverHost,ServerPort: serverPort,FromEmail:  fromEmail,FromPasswd: fromPasswd,Toers:      myToers,CCers:      myCCers,}t.Logf("init email.\n")InitEmail(myEmail)SendEmail(subject, body)
}

测试时注意将源码的fromEmail、fromPasswd、myToers修改为实际值。
安装依赖包:

go get github.com/go-gomail/gomail

直接运行:

go test

即可。

本文源码可在https://github.com/latelee/goemail找到。

过了半年的PS:近期笔者邮箱收到了许多测试邮件,如果使用本文示例,请修改myToers为自己想接收的邮件地址,另外请勿修改fromEmail邮件密码。另外,也有部分同志在测试中写了些不和谐的文字,请勿如此。
————————————————
版权声明:本文为CSDN博主「李迟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/subfate/article/details/86491032

使用golang发送电子邮件相关推荐

  1. 亚马逊ses如何发qq_使用Amazon SES发送电子邮件

    亚马逊ses如何发qq by Kangze Huang 黄康泽 使用Amazon SES发送电子邮件 (Sending emails with Amazon SES) 完整的AWS Web样板-教程3 ...

  2. php mail函数_PHP发送电子邮件函数mail详解

    重要:本文最后更新于2019-10-09 08:49:07,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗. PHP作为一门使用广泛的脚本语言,经过这么多年发展已经非常完善了,发送电子 ...

  3. 如何使用PHP发送电子邮件?

    本文翻译自:How to send an email using PHP? I am using PHP on a website and I want to add emailing functio ...

  4. 如何从我的Android应用程序发送电子邮件?

    我正在为Android编写应用程序. 如何从中发送电子邮件? #1楼 简单尝试这个 public void onCreate(Bundle savedInstanceState) {super.onC ...

  5. 在Python中使用SMTP发送电子邮件

    Python中有内置的smtplib模块,完成一封邮件的发送,需要做很多准备工作.第三方的py_smtp这个包也是基于smtplib的,在Python中使用py_smtp发送电子邮件非常方便,只要填写 ...

  6. C# 发送电子邮件(含附件)用到的类 system.web.mail

    主要是用到了System.Web.Mail命名空间,用到了此空间的三个类,分别是: ●MailMessage类,用于构造电子邮件 ●MailAttachment类,用于构造电子邮件附件 ●SmtpMa ...

  7. net类库中发送电子邮件的方法总结

    发送电子邮件是许多需要用户注册的网站的通用功能,通过正则表达式我们可以过滤掉不符合电子邮件格式的输入,但是仍没有办法确保用户填写的电子邮件地址一定是他本人真实有效的电子邮件地址,通常验证电子邮件真实有 ...

  8. iphone发送邮件html,iPhone使用smtp服务器发送电子邮件?

    在我的应用程序中,我能够使用smtp服务器发送电子邮件,因为我输入了正确的电子邮件ID和密码. 但当我输入我的Gmail或雅虎帐户详细信息时,我无法发送邮件. 因为我设置了relayHost = @& ...

  9. linux发邮件安装什么意思,linux – 如何找出安装/发送电子邮件的邮件程序?

    我正在尝试找出在我的服务器上发送电子邮件的电子邮件程序(如果有的话).我的雇主有几台服务器,其中大部分使用sendmail,但在我们的两台服务器上,我找不到电子邮件程序,但电子邮件已经发送了吗?我不想 ...

最新文章

  1. 高性能Server---Reactor模型
  2. VM8不能安装64位操作系统原因解析
  3. python项目实战三个小实例
  4. BZOJ1103: [POI2007]大都市meg
  5. AD4003 VHDL设计及仿真
  6. flask 安装flask_resultful
  7. 【Python】一些函数
  8. Android 系统(185)---如何使用adb command来设置cpu频率和核数
  9. POJ1741 Tree(点分治)
  10. 如何为项目中的单个文件禁用ARC?
  11. thymeleaf获取url地址跳转时所带参数
  12. poj-1190 生日蛋糕 **
  13. android最新仿微信表情面板,Android高仿微信表情输入与键盘输入详解
  14. python中字符串中文乱码_Python中文乱码的处理
  15. 2021第十二届蓝桥杯大赛软件赛省赛C++ B组真题题解
  16. 半价了:阿里云挑起价格战 您用得满意,请点赞
  17. 微型计算机的安装步骤,技嘉微型电脑BRIX BSi3H-6100黑苹果安装详细教程
  18. 概率论与数理统计:六大基本分布及其期望和方差
  19. 基于matlab菌落影像分割方法,基于MATLAB的图像分割方法及应用-
  20. 带email认证的用户注册网站

热门文章

  1. 密码-正则校验(数字、字母、特殊字符-任意组合)
  2. jenkins定时备份插件 ThinBackup
  3. Java售票方式_Java多线程之火车售票系统
  4. 芝诺悖论------芝诺的乌龟
  5. woo语言实现 m3u8流媒体视频文件 下载并播放
  6. ESP32通过蓝牙接收回发数据(有示例代码和步骤)
  7. Python 3 字符串 ljust( ) 方法
  8. 牛逼c语言代码,这段c语言代码牛逼在哪?
  9. Could not transfer artifact (https://repo.maven.apache.org/maven2): Received fatal alert: protocol_v
  10. 夕阳桥断 Linux(centos6.5)下安装jenkins Jenkins 的前身是 Hudson 是一个可扩展的持续集成引擎。 通俗的来讲,jenkins就是一个可以实现自动化部署的一个插