先看看效果图:

由于在开发中,所以直接用的微信的模板,其中的数据需要的可以联系我。
在注册邮箱激活的时候,我们一般的思路是:
一,用户注册
二,插入用户数据,此时帐号未激活状态。
三,将用户名密码或其他标识字符加密构造成激活识别码(你也可以叫激活码)。
四,将构造好的激活识别码发送到用户提交的邮箱。
五,用户登录邮箱并点击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发送邮件类...