保定 网站建设软件开发,新建的网站需要维护吗,干净无广告的搜索引擎,wordpress插件商品对比Go 有内置好的本地库可以发送邮件#xff0c;在 GitHub 上也有别人写好的第三方包可以发送邮件。
本文将分别介绍一下这两种发送邮件的方式。
1、内置的net/smtp
为了更好的模拟发送邮件#xff0c;推荐一个邮件测试工具#xff1a;MailHog#xff0c;MailHog 是面向开发…Go 有内置好的本地库可以发送邮件在 GitHub 上也有别人写好的第三方包可以发送邮件。
本文将分别介绍一下这两种发送邮件的方式。
1、内置的net/smtp
为了更好的模拟发送邮件推荐一个邮件测试工具MailHogMailHog 是面向开发人员的电子邮件测试工具其将应用程序配置为使用 MailHog 进行 SMTP 传递并且可以在 Web UI 中查看已经发送的邮件。
MailHog 使用步骤
先下载需要的版本及对应系统的二进制文件 Download the latest release for your platform
以 v1.0.0 Windows10 为例点击下图中红框开始下载。
下载完成之后得到一个 .exe 文件在文件中找到该文件双击启动会以黑窗口的形式运行。 在浏览器中访问 http://localhost:8025/ 在这个页面可以看到开发人员在测试阶段发送的邮件。
编写代码
package mainimport (fmtlognet/smtptime
)// Email 邮箱
type Email struct {From string json:from describe:发送方To []string json:to describe:接收方Sender string json:senderdescribe:发送名称Subject string json:subject describe:标题Content string json:content describe:内容EndTime string json:end_time describe:时间
}// Smtp 邮件服务
type Smtp struct {Server string json:serverPort int64 json:port
}func main() {s : Smtp{Server: 127.0.0.1,Port: 1025,}// 一次要发送给哪些邮箱strings : []string{2017431971qq.com,2011235436qq.com,}e : Email{From: 2017431971qq.com,To: strings,Sender: koyal,Subject: 测试邮件,Content: 这是一个测试邮件,EndTime: time.Now().Format(2006-01-02 15:04:05),}// 定义邮件内容message : fmt.Sprintf(Subject: %s\r\n\r\n%s\r\n%s, e.Subject, e.Content, e.EndTime)// 连接到 MailHog 的 SMTP 服务器auth : smtp.PlainAuth(, , , s.Server)for _, str : range strings {err : smtp.SendMail(fmt.Sprintf(%s:%d, s.Server, s.Port), auth, e.From, []string{str}, []byte(message))if err ! nil {log.Fatalf(smtp.SendMail is failed , err:%v, err)return}}log.Println(Email send successfully!)}在本地启动项目到 MailHog Web UI 中查看是否发送了邮件 可以看到已经拿到刚才发送的邮件。
在默认情况下上述的两个端口 1025 和 8025 分别是监听 SMTP 服务器和Web界面服务器所以会用到两个不同的端口号。
2、使用 GitHub 第三方包
这次使用 QQ 邮箱测试一下是否可以正常的发送邮件。
首先需要在 QQ 邮箱中开启 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV 服务
设置 账号 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV 服务 开启服务 手机验证等一系列操作完成之后会生成一个授权码
代码编写
使用 go get github.com/jordan-wright/email 命令拉取第三方包
package mainimport (github.com/jordan-wright/emaillognet/smtp
)func main() {// 实例化邮件对象em : email.NewEmail()// 发送方邮箱em.From 2017431971qq.com// 接收方邮箱em.To []string{2017431971qq.com}// 邮件标题em.Subject 测试邮件// 邮件内容em.Text []byte(hello这是一个测试邮件。)// 发送邮件 xxxxxxxxx 为刚才生成的授权码err : em.Send(smtp.qq.com:587, smtp.PlainAuth(, 2017431971qq.com, xxxxxxxxx, smtp.qq.com))if err ! nil {log.Fatalf(em.Send is failes, err: %v, err)return}log.Println(send successfully...)}
在本地启动项目去 QQ 邮箱中看是否收到了邮件。 可以正常的拿到想要的邮件。