先看看效果图:
由于在开发中,所以直接用的微信的模板,其中的数据需要的可以联系我。
在注册邮箱激活的时候,我们一般的思路是:
一,用户注册
二,插入用户数据,此时帐号未激活状态。
三,将用户名密码或其他标识字符加密构造成激活识别码(你也可以叫激活码)。
四,将构造好的激活识别码发送到用户提交的邮箱。
五,用户登录邮箱并点击URL,进行激活。
六,验证激活识别码,如果正确则激活帐号。
首先我们要做的是在数据表中完善用户的字段,在user的表结构中添加三个字段:
--其他代码 `token` varchar(50) NOT NULL COMMENT '帐号激活码', `token_exptime` int(10) NOT NULL COMMENT '激活码有效期', `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '状态,0-未激活,1-已激活',
用户登录之后,添加一个方法来输出用户邮箱验证:
//验证邮箱 public function email(){ $this->email = M('user')->where(array('u_id'=>session('uid')))->find(); //dump($email);die; $this->display(); }
然后添加一个验证邮箱表单,用户登陆之后可以验证邮箱
<eq name="email['u_static']" value="0"> 你尚未验证邮箱,请验证 <form action="{:U('User/Member/emailH')}" method="post"> 邮箱:<input name="email" value="{$email.u_email}" type="email"/> <input type="submit" value="发送邮件"/> </form> <else /> 你已经验证了邮箱[{$email['u_email']}] </eq>
然后当用户没有验证邮箱的时候就是可以验证的,否则就显示已经验证了。我们写一个方法发送验证码,然后通同步存入数据库。同时邮箱修改为验证的邮箱。
//验证邮箱操作 public function emailH(){ $data = array( "u_email"=>I('post.email'), "u_id"=> session('uid'), 'u_token'=>md5(session('user').time()), 'u_token_exptime'=>time()+60*60*24, ); //dump($data);die; if(M('user')->save($data)){ $content = "<div style='background-color:#d0d0d0;text-align:center;padding:40px;'> <div class='mmsgLetter' style='width:580px;margin:0 auto;padding:10px;color:#333;background-color:#fff;border:0px solid #aaa;border-radius:5px;-webkit-box-shadow:3px 3px 10px #999;-moz-box-shadow:3px 3px 10px #999;box-shadow:3px 3px 10px #999;font-family:Verdana, sans-serif; '> <div class='mmsgLetterHeader' style='height:23px;background:url(http://ec.com/Public/Images/topline.png) repeat-x 0 0;'></div> <div class='mmsgLetterContent' style='text-align:left;padding:30px;font-size:14px;line-height:1.5;background:url(http://ec.com/Public/Images/mark.png) no-repeat top right;'> <div> <p>你好!</p> <p>感谢你注册。 <br>你的登录邮箱为:".I('post.email')."。请点击以下链接激活帐号:</p> <p style='word-wrap:break-word;word-break:break-all;'><a href='http://ec.com/User/Member/check?verify=".$data['u_token']."' target='_blank'>http://ec.com/User/Member/check?verify=".$data['u_token']."</a></p> <p>如果以上链接无法点击,请将上面的地址复制到你的浏览器(如IE)的地址栏进入。 (该链接在24小时内有效,24小时后需要重新验证)</p> </div> <div class='mmsgLetterInscribe' style='padding:40px 0 0;'> <img class='mmsgAvatar' src='http://ec.com/Public/Images/msg.png' style='float:left;'> <div class='mmsgSender' style='margin:0 0 0 54px;'> <p class='mmsgName' style='margin:0 0 10px;'>Hang Long</p> <p class='mmsgInfo' style='font-size:12px;margin:0;line-height:1.2;'>校服网产品经理<br> <a href='mailto:admin@loveteemo.com' style='color:#407700;'>admin@loveteemo.com</a></p></div></div></div></div></div>"; SendMail(I('post.email'),'激活您的账号',$content); $this->success('发送邮件完成,请查收。',"/User/Index/index"); } }
其中识别标志的的写法是用户名+当前时间戳然后md5加密。上面的模板是采用微信的用户验证,发送给用户之后就是如上图的效果了。
然后就是点击之后的链接验证
//验证邮箱 public function check(){ $token = I('get.verify'); $nowtime = time(); $row = M('user')->where(array("u_token"=>$token,"u_static"=>'0'))->find(); if($row){ if($nowtime>$row['u_token_exptime']){ $this->error("你的验证邮件已过期!"); }else{ M('user')->where(array("u_id" => $row['u_id']))->setField("u_static","1"); $this->success('激活成功!',"/User/Index/index"); } } }
当用户点击这链接的时候我们接受这个值和数据库的比对,而且查询static为0的,如果查询到了,那么就是激活成功,状态改为1,如果没有激活,或者超过24小时,那么就不算激活。大致上写道这里就完成了。下一篇给大家分享一个PHPmail类。
上一篇: 图片裁剪并保存到服务器...
下一篇: 一个好用的PHP发送邮件类...