qq邮箱-设置-账户
安装
go get -u github.com/jordan-wright/email
go get -u github.com/garyburd/redigo/redis
dao/user_dao.go
func SendEmailValidate(em []string) (string,error) {
e:=email.NewEmail()
e.From = fmt.Sprintf("发件人笔名 <发件人邮箱>")
e.To = em
// 生成6位随机验证码
rnd := rand.New(rand.NewSource(time.Now().UnixNano()))
vCode := fmt.Sprintf("%06v", rnd.Int31n(1000000))
t := time.Now().Format("2006-01-02 15:04:05")
//设置文件发送的内容
content := fmt.Sprintf(`
<div>
<div>
尊敬的%s,您好!
</div>
<div style="padding: 8px 40px 8px 50px;">
<p>您于 %s 提交的邮箱验证,本次验证码为<u><strong>%s</strong></u>,为了保证账号安全,验证码有效期为5分钟。请确认为本人操作,切勿向他人泄露,感谢您的理解与使用。</p>
</div>
<div>
<p>此邮箱为系统邮箱,请勿回复。</p>
</div>
</div>
`, em[0], t, vCode)
e.Text = []byte(content)
//设置服务器相关的配置
err := e.Send("smtp.qq.com:25", smtp.PlainAuth("", "发件人邮箱", "发件人邮箱授权码", "smtp.qq.com"))
return vCode,err
}
controller/user_controller.go
// GetValidateCode
// @Title GetValidateCode
// @Description 发送邮箱验证码 并存入redis(5分钟有效时间)
// @Author hyy 2022-03-05 18:18:47
// @Param c type description
func GetValidateCode(c *gin.Context) {
// 获取目的邮箱
em := []string{c.Param("email")}
vCode, err := dao.SendEmailValidate(em)
if err != nil {
log.Println(err)
c.JSON(http.StatusBadRequest, gin.H{
"status": 400,
"msg": "验证码发送失败",
"ERROR-CONTROLLER": err.Error(),
})
return
}
// 验证码存入redis 并设置过期时间5分钟
_, err = util.RedisCont.Do("set", "vCode", vCode)
_, _ = util.RedisCont.Do("expire", "vCode", 300)
if err != nil {
log.Println(err.Error())
c.JSON(http.StatusBadRequest, gin.H{
"status": 400,
"msg": "验证码存储失败",
"ERROR-CONTROLLER": err.Error(),
})
return
}
c.JSON(http.StatusOK, gin.H{
"msg": "验证码发送成功",
"status": 200,
"vCode": vCode,
})
return
}
// ValidateEmailCode
// @Title ValidateEmailCode
// @Description 验证邮箱验证码,并注册用户。
// @Author hyy 2022-03-05 18:19:18
// @Param c type description
func ValidateEmailCode(c *gin.Context) {
vCode := c.Param("vCode")
var user model.User
err := c.ShouldBindJSON(&user)
if err != nil {
log.Println(err.Error())
c.JSON(http.StatusBadRequest, gin.H{
"status": 400,
"msg": "注册失败,json解析失败",
"ERROR-CONTROLLER": err.Error(),
})
return
}
// 默认用户权限为2
if user.Level == 0 {
user.Level = 2
}
user.CreatAt = time.Now().Format("2006-01-02 15:04:05")
// 设置默认头像
if user.HandPortrait == "" {
user.HandPortrait = "https://gin-study-1308216693.cos.ap-nanjing.myqcloud.com/handportrait.png"
}
// 验证结构体字段
if err := util.Validate.Struct(&user); err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"status": 400,
"msg": "注册失败,非法字段!",
"ERROR-VALIDATE": util.GetErr(err),
})
return
}
// 对密码进行加密
user.Password = util.Md5Encrypt(user.Password)
// 获取存储在redis中的验证码
vCodeRaw, err := util.RedisCont.Do("get", "vCode")
if err != nil {
log.Println(err.Error())
c.JSON(http.StatusBadRequest, gin.H{
"status": 400,
"msg": "Redis获取vCode失败",
"ERROR-CONTROLLER": err.Error(),
})
return
}
if string(vCodeRaw.([]byte)) != "" && vCode == string(vCodeRaw.([]byte)) {
result := service.InsertUser(&user)
if result["result"].(bool) {
result["msg"] = "注册成功!"
c.JSON(http.StatusOK, result)
return
} else {
c.JSON(http.StatusBadRequest, result)
return
}
} else {
c.JSON(http.StatusBadRequest, gin.H{
"status": 400,
"msg": "验证码已失效",
})
return
}
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有