博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go发送电子邮件
阅读量:4188 次
发布时间:2019-05-26

本文共 2276 字,大约阅读时间需要 7 分钟。

目录


前言

Go原生包net/smtp可以实现基本的发送邮件功能。Go的第三方包gomail可以实现更多的发送功能。下面来一一介绍。

 

获取授权码

部分邮箱(例如QQ邮箱)发送邮件时,使用的不是密码,而是授权码。授权码的获取方式请参考:。

 

使用Go原生smtp包发送邮件

所需导入包

需要使用 net/smtp 包

import (    "net/smtp")

 

身份、发送者和密码

identity := ""sender := "tcattime@qq.com"pwd := "lzffxekpzhuazsfeagb2"

⚠️发送者sender必须是合法有效的邮箱。有些邮箱发送时需要的是授权码,而非密码。因此需要将pwd的值替换为授权码。

 

stmp域名和端口

host :="smtp.qq.com"port := "25"

使用QQ邮箱作为发送者邮箱时,域名和端口如上配置。

 

接收者切片

可以一次性发送给多个用户:

sendTo:=[]string{"tester@qq.com", "cat@huawei.com"}

 

发送者名称

senderName := "TCatTime"

定义邮件发送者的名字。

 

标题和正文

title := "have a nice day"body := "test8.0"

定义邮件的标题和正文内容。

 

生成授权

调用smtp包中的PlainAuth函数,生成授权。

auth := smtp.PlainAuth(identity, sender, pwd, host)

 

指定上下文类型

content_type := "Content-Type: text/html; charset=UTF-8"

 

拼接发送消息和url

msg := []byte("To: " + strings.Join(sendTo, ",",) + "\nFrom: " + senderName +		"<" + sender + ">\nSubject: " + title + "\n" + content_type + "\n" + body + "\n")url := host + ":" + port

 

发送邮件

err := smtp.SendMail(url, auth, sender, sendTo, msg)if err != nil {	fmt.Printf("\n\nsend mail error: %v", err)	return}fmt.Println("\n\nsend mail success!")

 

发送邮件实测

 

使用第三方包----gomail

gomail简单介绍

gomail框架对go原生的smtp包做了一层封装,使用更直观、简便。且gomail可以更方便的发送带有附件的邮件、添加抄送者等。

 

获取gomail

1、使用go-get获取

github.com/go-gomail/gomail

2、使用go-mod获取

进入项目目录下

go mod tidy

 

生成gomail message

m := gomail.NewMessage()

 

设置发件人信息

m.SetAddressHeader("From", "a@qq.com", "发件人")

 

设置收件人信息

m.SetHeader("To",	m.FormatAddress("b@qq.com", "收件人"))

 

设置抄送者信息

m.SetHeader("Cc",	m.FormatAddress("xxxx@foxmail.com", "收件人1"),	m.FormatAddress("xxxx@foxmail.com", "收件人2"))

 

设置密送者信息

m.SetHeader("Bcc",	m.FormatAddress("xxxx@gmail.com", "收件人1"),	m.FormatAddress("xxxx@gmail.com", "收件人2"))

 

设置邮件主题

m.SetHeader("Subject", "go-mail测试")

SetHeader方法的第一个参数表示邮件标题(Subject),第二个参数表示邮件主题(go-mail测试)。

 

书写正文内容

m.SetBody("Content-Type: text/html; charset=UTF-8", "go-mail")

SetBody()方法的第一个参数表示正文内容的类型和默认的编码格式。第二个参数是正文内容。

 

添加附件

m.Attach("/Users/root/Desktop/demo.docx")

使用Attach()方法添加一个附件到邮件中。附件的路径为服务器端的绝对路径。

 

设置拨号器

发送邮件的最后一项准备工作是设置拨号器。使用NewDialer()函数生成一个拨号器。将邮件服务器、端口、发送者邮箱、密码(或授权码)依次传入NewDialer()函数中。以QQ邮箱为例:

d := gomail.NewDialer("smtp.qq.com", 25, "demo@qq.com", "lzfxkkpzuasfeagz")

 

🚀发送邮件~

最后一步,发送!

err := d.DialAndSend(m)if err != nil {    fmt.Println("send mail error:", err.Error())    return}fmt.Println("Send mail finished!")

 

转载地址:http://fbsoi.baihongyu.com/

你可能感兴趣的文章
HTML5学习之——HTML 5 服务器发送事件
查看>>
mysql中用命令行复制表结构的方法
查看>>
hbase shell出现ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException
查看>>
解决Rhythmbox乱码
查看>>
豆瓣爱问共享资料插件发布啦
查看>>
kermit的安装和配置
查看>>
linux中cat命令使用详解
查看>>
java中的异常机制
查看>>
商务智能-基本方法-数据钻取
查看>>
openstack-instance-high-availability-Evacuate
查看>>
evacuate-instance-automatically
查看>>
pycharm常用设置(keymap设置及eclipse常用快捷键总结)
查看>>
关于在openstack的环境变量.bashrc自定自己简化命令
查看>>
Openstack Heat Project介绍(转)
查看>>
How to Perform an Upgrade from Icehouse to Juno(ice升级到juno)
查看>>
高扩展性网站的50条原则(转)-思维导图
查看>>
解决openstack novnc一段时间后自动挂断登录不上问题,novncproxy dead but pid file exists
查看>>
构建OpenStack的云基础架构:ManageIQ(转)
查看>>
云管理软件 ManageIQ(转)
查看>>
CentOS 7.0,启用iptables防火墙(转)
查看>>