简述
Go 提供了一个 smtp(Simple Mail Transfer Protocol - 简单邮件传输协议)库作为其网络包的一部分,“net/smtp”公开了一些可立即使用的有用功能。
Gomail
- 一个比较成熟的第三方包,提供了一个快速、简单的解决方案,可以轻松地发送电子邮件。
SMPT
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。
实例
1.导入gomail
go get “github.com/go-gomail/gomail”
2.demo
package main
import (
"bytes"
"fmt"
"github.com/go-gomail/gomail"
"html/template"
)
func main() {
m := gomail.NewMessage()
//发件人邮箱
fromEmail := "123456@qq.com"
//发件人昵称
fromName := "zhq"
m.SetAddressHeader("From", fromEmail, fromName) // 发件人
//收件人邮箱
toEmail := "67890@163.com"
m.SetHeader("To", // 收件人
m.FormatAddress(toEmail, ""),
)
m.SetHeader("Subject", "发送邮件测试") // 主题
//初始化模板
emailTemplate := `<div></div>`
t, err := template.New("mail summary template").Parse(emailTemplate)
if err != nil {
fmt.Println(err)
}
buffer := new(bytes.Buffer)
data := &struct{
Vcode string
}{
Vcode:"hello world",
}
//动态配置模板
t.Execute(buffer,data)
// 正文
m.SetBody("text/html", buffer.String())
//发件人邮箱授权码
fromEmailPassword := "123"
d := gomail.NewDialer("smtp.qq.com", 465, fromEmail, fromEmailPassword)
if err := d.DialAndSend(m); err != nil {
fmt.Println(err)
}
fmt.Println("邮件已发送")
}
ps:需要注意的是 d := gomail.NewDialer(“smtp.qq.com”, 465, fromEmail, fromEmailPassword) 中
fromEmailPassword
并非邮箱密码,而是授权码
执行代码,如果输出邮件已发送
表示邮件发送成功,查看收件人邮箱即可
3.获取授权码,以qq邮箱为例
进入邮箱 -> 设置 -> 账户 -> POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 -> 开启POP3/SMTP服务
常用邮箱
列举一些常用的邮箱,可以用来测试:
QQ 邮箱 POP3 服务器地址:qq.com(端口:995) SMTP 服务器地址:smtp.qq.com(端口:465/587)
163 邮箱: POP3 服务器地址:pop.163.com(端口:110) SMTP 服务器地址:smtp.163.com(端口:25)
126 邮箱: POP3 服务器地址:pop.126.com(端口:110) SMTP 服务器地址:smtp.126.com(端口:25)
参考资料:
https://blog.csdn.net/liang19890820/article/details/53084638
https://blog.csdn.net/wangshubo1989/article/details/70808989