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("注册成功,请前往邮箱激活")
}