golang qq邮件发送验证码功能
验证码的使用场景
- 注册/登录:使用验证码可以有效减少垃圾账号注册和恶意登录;
- 短信接口保护:高效减少防止短信接口被刷情况;
- 提交/投票:有效减少恶意刷单、恶意提交、恶意投票等情况;
- 密码找回:用于找回密码、修改手机等需要校验用户属于本人操作的情况;
- 支付验证:用户付款时验证手机号,保障用户资金安全。
例子:golang发送qq邮件
第一步:拿到授权码
通过编码的方式发送邮件,就是调用qq邮箱提供的接口来进行邮件的发送,我们在编写该功能前,需要拿到qq邮箱的POP3/SMTP服务的授权码。
我们开启SMTP/IMAP服务,生成授权码,保存一下授权码,后面要用到。
第二步:下载依赖包
go get gopkg.in/gomail.v2
这个例子中我使用的是 gopkg.in/gomail.v2 包,发送邮件也可以用 github.com/jordan-wright/email 包。
第三步:写代码
注意要点:
验证码有效时间两次发送验证码的间隔时间一个验证码只能使用一次
因为涉及到数据库,所以我省略掉了这部分的代码,读者自行添加
将项目中的发送邮件的内容抽取出来得到以下简略代码:
package main import ( "fmt" "gopkg.in/gomail.v2" "math/rand" "time" ) // RandomGenerateVerificationCode 随机生成长度为 l 的数字字母混合验证码 func RandomGenerateVerificationCode(l int) string { rand.Seed(time.Now().UnixNano()) const letters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" b := make([]byte, l) for i := range b { b[i] = letters[rand.Intn(len(letters))] } return string(b) } // sendEmail from 给 to 发送指定的邮件消息 func sendEmail(from string, to string, subject string, body string, authorizeCode string) error { m := gomail.NewMessage() // 设置邮件消息的头部字段(例如发件人、收件人、主题等)。 m.SetHeader("From", from) // 发送人 m.SetHeader("To", to) // 接收人 // m.SetAddressHeader("Cc", "xxx@qq.com", "xiaozhujiao") // 抄送人 m.SetHeader("Subject", subject) // 主题 m.SetBody("text/plain", body) // 正文的内容。text/plain表示纯文本,"text/html" 表示 HTML 内容。 // m.Attach("myIpPic.png") // 附件 // gomail.NewDialer():创建一个新的邮件拨号器对象,用于通过指定的 SMTP 服务器发送邮件。 // 四个参数: // host:SMTP 服务器的主机地址。例如 "smtp.qq.com"。 // port:SMTP 服务器的端口号。例如 587。 // username:SMTP 服务器的用户名(通常是你的邮箱地址)。 // password:SMTP 服务器的密码(或者授权码)。 d := gomail.NewDialer("smtp.qq.com", 587, from, authorizeCode) // 通过拨号器对象发送指定的邮件消息 if err := d.DialAndSend(m); err != nil { return err } return nil } func main() { l := 6 code := RandomGenerateVerificationCode(l) from := "XXXXXXXXX@qq.com" to := "XXXXXXX@qq.com" subject := "验证码" body := fmt.Sprintf("你的验证码为 %s,有效时间为 %s\n", code, "5分钟") authorizeCode := "XXXXXXXXXXXX" // 授权代码 err := sendEmail(from, to, subject, body, authorizeCode) if err != nil { fmt.Println("err = ", err) return } // 从数据库中检验密码(注意密码加密)...... }
结果:
如果想要发送的结果更好看一点,我们可以添加html代码,将main函数里面的body修改为:
body := fmt.Sprintf(` <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>验证码</title> <style> body { font-family: Arial, sans-serif; } .container { padding: 20px; border: 1px solid #ddd; border-radius: 5px; } h1 { color: #333; } .code { font-size: 24px; font-weight: bold; color: #007bff; } .footer { margin-top: 20px; font-size: 12px; color: #888; } </style> </head> <body> <div class="container"> <h1>你的验证码</h1> <p class="code">%s</p> <p>有效时间为 5 分钟</p> <div class="footer">如果您没有请求此验证码,请忽略此邮件。</div> </div> </body> </html> `, code)
再次运行代码,结果如下:
当然除此之外还有行为验证码,图片验证码,语音验证码...图片如下:
到此这篇关于golang qq邮件发送验证码的文章就介绍到这了,更多相关golang qq邮件发送验证码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Go strconv包实现字符串和基本数据类型转换的实例详解
在Go语言(Golang)的编程实践中,strconv包是一个非常重要的标准库,它提供了在基本数据类型(如整型、浮点型、布尔型)和字符串之间的转换功能,本文给大家介绍了关于Go语言字符串转换strconv,需要的朋友可以参考下2024-09-09
最新评论