209-beego邮件校验激活

30 篇文章 1 订阅




beego邮件校验激活



注册过程中
把用户的信息都存储到数据库中之后
需要给用户发一封邮件
然后告诉用户去邮箱里面激活

这样做的好处是
可以判断用户在注册的时候输入的邮箱是否正确

然后以后如果要推出什么新产品
就可以给用户发送邮件


这个过程是这样的

beego服务器--->STMP服务器--->目的邮箱




STMP服务器就是邮件代发服务器
一般由邮件服务商提供
常见的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)





我们尝试一下开启邮箱的SMTP服务
我们登录我们的邮箱
QQ邮箱,163邮箱这些都可以

然后找到SMTP服务
开启SMTP服务
拿到授权码 abcdabcdabcd



然后我们用代码来连接SMTP服务

1.指定发送邮件的配置信息
config := `{"username":"123123123@qq.com","password":"abcdabcdabcd","host":"smtp.qq.com","port":587}`

这里我们指定了发件人的
1.邮箱名称
2.发送秘钥
3.SMTP服务器
4.端口号

我使用的是QQ邮箱
如果我们要用163或者其他服务器
就要修改一下
比如smtp.163.com


2.然后我们要创建一个email对象
email := utils.NewEmail(config)

3.然后通过email对象的属性,我们赋值一下
email.To=[]string{user.Email}
email.From="123123123@qq.com"
email.Subject="用户激活"
email.HTML="复制该链接到浏览器中进行激活:127.0.0.1:8080/active?id="+strconv.Itoa(user.Id)

4.然后我们发送邮件
err := email.Send()
if err!=nil {
	this.Data["err"]="发送邮件失败,请重新注册"
	this.TplName="register.html"
	return
}
this.Ctx.WriteString("注册成功,请前往邮箱激活")





然后我们要接收一下用户的id
id,err:=this.GetInt("id")
if err !=nil{
   this.Data["errmsg"] = "激活路径不正确,请重新确定之后登陆!"
   this.TplName = "login.html"
   return
}


o:=orm.NewOrm()
user := models.User{Id:id}
err = o.Read(&user)
if err != nil{
   this.Data["errmsg"] = "激活路径不正确,请重新确定之后登陆!"
   this.TplName = "login.html"
}



如果找到了对应的用户信息
那么就激活成功
active=true

user.Active = true
_,err = o.Update(&user)
if err != nil{
   this.Data["errmsg"] = "激活失败,请重新确定之后登陆!"
   this.TplName = "login.html"
}
this.Redirect("/login",302)




然后我们看下完整代码

func(this*UserController)ActiveUser(){
   //获取传输过来的数据
   id,err:=this.GetInt("id")
   if err !=nil{
      this.Data["errmsg"] = "激活路径不正确,请重新确定之后登陆!"
      this.TplName = "login.html"
      return
   }
   //更新激活字段
   o:=orm.NewOrm()
   user := models.User{Id:id}
   err = o.Read(&user)
   if err != nil{
      this.Data["errmsg"] = "激活路径不正确,请重新确定之后登陆!"
      this.TplName = "login.html"
       return
   }
   user.Active = true
   _,err = o.Update(&user)
   if err != nil{
      this.Data["errmsg"] = "激活失败,请重新确定之后登陆!"
      this.TplName = "login.html"
       return
   }
   this.Redirect("/login",302)

}






然后我们看下注册完整代码

//处理注册业务
func (this*UserController)HandleReg(){
   //1.获取数据
   userName := this.GetString("user_name")
   pwd := this.GetString("pwd")
   cpwd := this.GetString("cpwd")
   email := this.GetString("email")
   //2.数据校验
   if userName == "" || pwd == "" || cpwd == "" || email == ""{
      this.Data["errmsg"] = "输入信息不完整,请重新输入!"
      this.TplName = "register.html"
      return
   }
   if pwd != cpwd{
      this.Data["errmsg"] = "两次输入密码不一致,请重新输入!"
      this.TplName = "register.html"
      return
   }
  	reg,_ := regexp.Compile("^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$")
	res := reg.FindString(email)
	if res == ""{
		this.Data["errmsg"] = "邮箱格式不正确"
		this.TplName = "register.html"
		return
	}
   //3.插入数据库
   o := orm.NewOrm()
   user := models.User{}
   user.Name = userName
   user.PassWord = pwd
   user.Email = email

   //4.判断用户名是否重复,如果重复重新注册
   err = o.Read(&user,"Name")
   if err != orm.ErrNoRows{
      this.Data["errmsg"] = "用户以存在,请重新注册"
      this.TplName = "register.html"
      return
   }
   //插入数据库
   _,err = o.Insert(&user)
   if err != nil {
      this.Data["errmsg"] = "插入失败,请重新注册"
      this.TplName = "register.html"
      return
   }
   //发送邮件
   config := `{"username":"123123123@qq.com","password":"abcabcabc","host":"smtp.qq.com","port":587}`
   temail:=utils.NewEMail(config)
   temail.To = []string{user.Email}
   temail.From = "123123123@qq.com"
   temail.Subject = "用户激活"

   temail.HTML = "复制该连接到浏览器中激活:127.0.0.1:8088/active?id="+strconv.Itoa(user.Id)

   err = temail.Send()
   if err != nil{
      this.Data["errmsg"] = "发送激活邮件失败,请重新注册"
      this.TplName = "register.html"
      return
   }

   this.Ctx.WriteString("注册成功,请前往邮箱激活")

}


 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值