Golang 发送邮件 gomail使用

环境安装

这里我使用的是 “gopkg.in/gomail.v2”

1
go get gopkg.in/gomail.v2

开启 POP3/IMAP/SMTP/Exchange/CardDAV 服务 授权码

🦊:https://wx.mail.qq.com/account

方法封装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// SendMail 发送邮件
func SendMail(mailTo []string, subject string, body string) error {
// 设置邮箱主体
mailConn := map[string]string{
"user": "xxxxxxxx@qq.com", //发送人邮箱(邮箱以自己的为准)
"pass": "使用上面的授权码", //发送人邮箱的密码,现在可能会需要邮箱 开启授权密码后在pass填写授权码
"host": "smtp.qq.com", //邮箱服务器(此时用的是qq邮箱)
}

m := gomail.NewMessage(
//发送文本时设置编码,防止乱码。 如果txt文本设置了之后还是乱码,那可以将原txt文本在保存时
//就选择utf-8格式保存
gomail.SetEncoding(gomail.Base64),
)
m.SetHeader("From", m.FormatAddress(mailConn["user"], "LLL")) // 添加别名
m.SetHeader("To", mailTo...) // 发送给用户(可以多个)
m.SetHeader("Subject", subject) // 设置邮件主题
m.SetBody("text/html", body) // 设置邮件正文

//一个文件(加入发送一个 txt 文件):/tmp/foo.txt,我需要将这个文件以邮件附件的方式进行发送,同时指定附件名为:附件.txt
//同时解决了文件名乱码问题
name := "附件.txt"
m.Attach("./gomail.txt",
gomail.Rename(name), //重命名
gomail.SetHeader(map[string][]string{
"Content-Disposition": []string{
fmt.Sprintf(`attachment; filename="%s"`, mime.QEncoding.Encode("UTF-8", name)),
},
}),
)

/*
创建SMTP客户端,连接到远程的邮件服务器,需要指定服务器地址、端口号、用户名、密码,如果端口号为465的话,
自动开启SSL,这个时候需要指定TLSConfig
*/
d := gomail.NewDialer(mailConn["host"], 465, mailConn["user"], mailConn["pass"]) // 设置邮件正文
//d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
err := d.DialAndSend(m)
return err
}

发送邮件

直接调用上面的方法封装函数即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
func main() {
// 邮件接收方
mailTo := []string{
//可以是多个接收人
"toObject@qq.com",
}

subject := "Hello World!" // 邮件主题
body := static.ParseString() // 邮件正文

err := SendMail(mailTo, subject, body)
if err != nil {
fmt.Println("Send fail! - ", err)
return
}
fmt.Println("Send successfully!")
}

小技巧-发送HTML格式的邮件内容

🦊:很多需要验证码操作的流程,我们接受邮件经常可以看到一个 小巧精致的卡片模板。这个就是封装HTML后的格式。

1.创建样式模板

例如 static/cardEmail.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// ParseString 读取对应文件输出string
func ParseString() string {
byte, err := ioutil.ReadFile("./static/cardEmail.html")
if err != nil {
fmt.Println("ReadFile error:", err)
return ""
}
return string(byte)
}

// 发送邮件
func main (){
styleInfo := ParseString()
err := SendMail(mailTo, subject, styleInfo)
if err != nil {
panic("Send Email Error"+err.Error())
}
}


Golang 发送邮件 gomail使用
http://yoursite.com/2023/02/19/Golang-发送邮件-gomail使用/
作者
Meng-Xin
发布于
2023年2月19日
许可协议