有时我们需要给用户发送验证码,但是手机短信验证会有成本,所以今天我在这里分享一下邮箱发送验证码的方法
依赖包
go get gopkg.in/gomail.v2
详细代码
下面的代码附有详细注释
package main
import (
"fmt"
"log"
"math/rand"
"time"
"gopkg.in/gomail.v2"
)
// MailboxConf 邮箱配置
type MailboxConf struct {
// 邮件标题
Title string
// 邮件内容
Body string
// 收件人列表
RecipientList []string
// 发件人账号
Sender string
// 发件人密码,QQ邮箱这里配置授权码
SPassword string
// SMTP 服务器地址, QQ邮箱是smtp.qq.com
SMTPAddr string
// SMTP端口 QQ邮箱是25
SMTPPort int
}
func main() {
var mailConf MailboxConf
mailConf.Title = "验证"
//这里就是我们发送的邮箱内容,但是也可以通过下面的html代码作为邮件内容
// mailConf.Body = "坚持才是胜利,奥里给"
//这里支持群发,只需填写多个人的邮箱即可,我这里发送人使用的是QQ邮箱,所以接收人也必须都要是
//QQ邮箱
mailConf.RecipientList = []string{"邮箱账号1","邮箱账号2"}
mailConf.Sender = `邮箱账号`
//这里QQ邮箱要填写授权码,网易邮箱则直接填写自己的邮箱密码,授权码获得方法在下面
mailConf.SPassword = "这里填写自己QQ邮箱授权码"
//下面是官方邮箱提供的SMTP服务地址和端口
// QQ邮箱:SMTP服务器地址:smtp.qq.com(端口:587)
// 雅虎邮箱: SMTP服务器地址:smtp.yahoo.com(端口:587)
// 163邮箱:SMTP服务器地址:smtp.163.com(端口:25)
// 126邮箱: SMTP服务器地址:smtp.126.com(端口:25)
// 新浪邮箱: SMTP服务器地址:smtp.sina.com(端口:25)
mailConf.SMTPAddr = `smtp.qq.com`
mailConf.SMTPPort = 25
//产生六位数验证码
rnd := rand.New(rand.NewSource(time.Now().UnixNano()))
vcode := fmt.Sprintf("%06v", rnd.Int31n(1000000))
//发送的内容
html := fmt.Sprintf(`<div>
<div>
尊敬的用户,您好!
</div>
<div style="padding: 8px 40px 8px 50px;">
<p>你本次的验证码为%s,为了保证账号安全,验证码有效期为5分钟。请确认为本人操作,切勿向他人泄露,感谢您的理解与使用。</p>
</div>
<div>
<p>此邮箱为系统邮箱,请勿回复。</p>
</div>
</div>`, vcode)
m := gomail.NewMessage()
// 第三个参数是我们发送者的名称,但是如果对方有发送者的好友,优先显示对方好友备注名
m.SetHeader(`From`, mailConf.Sender, "小铃铛官方")
m.SetHeader(`To`, mailConf.RecipientList...)
m.SetHeader(`Subject`, mailConf.Title)
m.SetBody(`text/html`, html)
// m.Attach("./Dockerfile") //添加附件
err := gomail.NewDialer(mailConf.SMTPAddr, mailConf.SMTPPort, mailConf.Sender, mailConf.SPassword).DialAndSend(m)
if err != nil {
log.Fatalf("Send Email Fail, %s", err.Error())
return
}
log.Printf("Send Email Success")
}
QQ邮箱获取授权码的方法
打开我们的邮箱,左上角点击设置然后点击账户
在下面找到SMTP并开启,在这里我已经开启过了,开启后他会给你一个授权码,如果授权码忘了,可以关闭再打开他会给你一个 新的授权码