使用 golang 发送电子邮件的两种方式
1、使用 golang 官方自带的 net/smtp 包
// 使用go自带的net/smtp包发送邮件
func SendToEmail(fromUser string, toUser string) error{
// 发件人,password 是验证码,不是密码
auth := smtp.PlainAuth("login_demo", fromUser, "password", "smtp.qq.com")
to := []string{toUser}
// 解析html模板文件
t, err := template.ParseFiles("email.html")
if err != nil {
logging.Errorf("ParseFiles error: %v", err)
return err
}
var body buffer.Buffer
headers := "MIME-version: 1.0;\nContent-Type: text/html; charset=UTF-8;"
body.Write([]byte(fmt.Sprintf("Subject: active mail\n%s\n\n", headers)))
//作为变量传递给html模板
t.Execute(&body, struct {
Name string
ActiveCode string
}{
Name: "wuyi",
ActiveCode: "aaa",
})
err = smtp.SendMail("smtp.qq.com:25", auth, toUser, to, body.Bytes())
if err != nil {
logging.Errorf("send mail error: %v", err)
return err
}
return nil
}
2、使用第三方库
2.1 安装第三方库
go get -v github.com/jordan-wright/email
2.2 参考代码
// 使用第三方库发送邮件
func SendEmail(fromUser string, toUser string) error {
e:= email.NewEmail()
e.From = fromUser
e.To = []string {toUser}
e.Subject = "active mail"
t, err := template.ParseFiles("email.html")
if err != nil {
logging.Errorf("ParseFiles error: %v", err)
return err
}
body := new(bytes.Buffer)
//作为变量传递给html模板
t.Execute(body, struct {
Name string
ActiveCode string
}{
Name: "wuyi",
ActiveCode: "aaa",
})
// html形式的消息
e.HTML = body.Bytes()
// 从缓冲中将内容作为附件到邮件中
//e.Attach(body, "email.html", "text/html")
// 以路径将文件作为附件添加到邮件中
//e.AttachFile("$GOPATH/src/email/main.go")
// 发送邮件(如果使用QQ邮箱发送邮件的话,password不是邮箱密码而是授权码)
return e.Send("smtp.qq.com:587", smtp.PlainAuth("", "XXX@qq.com", "password", "smtp.qq.com"))
}
html 模板文件参考
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户激活邮件</title>
</head>
<body>
<h1>亲爱的{{.Name}}:</h1>
<a href="10.100.130.10:10010/confirm?active={{.ActiveCode}}">请点击这里激活账户, 如果点不开,请复制下面的链接到浏览器中打开 </a>
</br>
10.100.130.10:10010/confirm?active={{.ActiveCode}}
</body>
</html>
版权声明:本文为qq_41900081原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。