做电商的项目时常常会拿到收到订单给发一封提醒邮件的需求,这个工作完全可以让服务器自动执行,下面就介绍一下在Go中发送邮件最好用的方式——gomail,话不多说,先上代码:
1、第一步需要下载gomail包:
go get gopkg.in/gomail.v2
更多功能可以参考:https://github.com/go-gomail/gomail
2、代码主体:
package main
import (
"fmt"
"gopkg.in/gomail.v2"
"log"
"strconv"
)
func SendMail(mailTo []string, subject string, body string) error {
// 设置邮箱主体
mailConn := map[string]string{
"user": "xxxxxxx@exmail.com",
"pass": "your password",
"host": "smtp.exmail.qq.com",
"port": "465",
}
port, _ := strconv.Atoi(mailConn["port"])
m := gomail.NewMessage()
m.SetHeader("From", m.FormatAddress(mailConn["user"], "xx官方")) // 添加别名
m.SetHeader("To", mailTo...) // 发送给用户(可以多个)
m.SetHeader("Subject", subject) // 设置邮件主题
m.SetBody("text/html", body) // 设置邮件正文
d := gomail.NewDialer(mailConn["host"], port, mailConn["user"], mailConn["pass"]) // 设置邮件正文
err := d.DialAndSend(m)
return err
}
func main() {
// 发送方
mailTo := []string{
"exmail<xxxxxx@exmail.com>", // 这里最好写成邮箱收发件时的这种标记格式
}
// 邮件主题
subject := "Hello"
// 邮件正文
body := "Automatic send by Go gomail from xxx官方."
err := SendMail(mailTo, subject, body)
if err != nil {
log.Print(err)
fmt.Printf("Send fail!")
return
}
fmt.Printf("send successfully!")
}
3、说明
这里需要额外说明的一点是关于邮箱的设置,在设置邮箱主体的部分,需要先设置邮箱开启客户端授权密码,以前163邮箱只需要在pass填密码即可 ,现在需要开启授权密码后在pass填写授权码,(qq邮箱也需要开启),如果使用企业邮箱,这里在pass填写密码即可。
使用163邮箱可能会报gomail: could not send email 1: 554 DT:SPM 163 smtp11这个错,会被163邮箱执行退信操作,因为被当成了垃圾邮件,网上的朋友解决了这个问题,是采用发送之前抄送自己的方式,如果遇到了可以参考一下:
使用网易163邮箱发送邮件报错:554 DT:SPM
所以我推荐大家还是使用企业邮箱更好,安全 还可靠;有空就试试,万一需求就在路上呢?
网友评论