关于通过邮箱找回密码的实现

首先要自己配置下自己所使用的smtp服务器,这里使用的是QQ的
//邮箱配置项
'SWIFT_HOST'=>'smtp.qq.com',
'SWIFT_USERNAME'=>'XXXX@qq.com',
'SWIFT_PASSWORD'=>'abrsjjqtpfgndccc',
// 验证验证码
// 通过验证码后 查找邮箱 然后将该邮箱对应的修改密码链接发过去
// 该链接链接到一个修改方法 通过寻找verify 找到用户 修改其密码
    public function mima(){
        // 并且设定好十分钟后才可以再发链接到邮箱
        if(!empty($_POST)){
          $Reader = D('reader');
          $where = array();
          $where['reader_email'] = I('post.reader_email');
          $where['reader_name'] = I('post.reader_name');
          $rst = $Reader -> where($where) -> find();
          if($rst == false){
              $this->redirect('Index/mima','',0.01,'<script>alert("输入错误");</script>');
              exit;
          }
          // 如果通过了验证   账号 和 邮箱   则继续 否则redirect + 提示验证码错误
          $where = array();
          $where['reader_email'] = $_POST['reader_email'];
          $reader = $Reader -> where($where)->find();
          // 如果存在该邮箱属于用户则继续
          
          $email = $reader['reader_email'];
          $username = $reader['reader_name'];
          $userpwd = $reader['reader_pwd'];
          $id = $reader['id'];

          $modtime = time();
          //创建用于激活识别码
          $token = md5($username.$userpwd.$email.$modtime); 
          //过期时间为10分钟后
          $token_exptime = time()+10*60;

          $dt = array(
            'id'      =>  $id,
            'token'     =>  $token,
            'token_exptime' =>  $token_exptime,
          );

          $link = $Reader -> save($dt);
    
          if($link){
            $url = U('active');//用于激活的地址
            $end = strrpos($url,'.');
            $url = substr($url,0,$end);
            $emailsubject = "XXXXX";//邮箱标题
            //邮箱内容
            $emailbody = "尊敬的".$username.":
            <br/>请点击链接修改您的帐号密码。
            <br/>
            <a href='".__APPURL__."/$url?verify=".$token."' target='_blank'>".__APPURL__."/$url?verify=".$token."</a>
            <br/>如果以上链接无法点击,请将它复制到你的浏览器地址栏中进入访问,该链接10分钟内有效。<br/>
            如果此次激活请求非你本人所发,请忽略本邮件。
            <br/>
            <p style='text-align:right'>-------- 敬上</p>";

            $rs = send_email($email,$emailsubject,$emailbody);
            //send_email(邮箱,邮箱标题,邮箱内容);
            if($rs){
              $msg = '恭喜您,提交成功!请登录到您的邮箱修改您的密码!';  
            }else{
              $msg = '提交失败!'; 
            }
            $this->redirect('Index/index',array(),0.00001,"<script>alert('$msg');</script>");
            exit;
          }
          }else{
            $this->display(); 
          }
    }
//修改地址  
    public function active(){
        $Reader = D('reader');
          if(!empty($_POST)){
            $Reader->create();
            $rst = $Reader->save();
            if($rst){
              // 记录你认为必要的session
              $this->redirect('Index/index','',0.001,'<script>alert("修改成功");</script>');
              exit;
            }else{
              $this->redirect('Index/index','',0.001,'<script>alert("修改失败");</script>');
              exit;
            }
            // 根据token查找
            // if OK 并且链接未过时 则提供修改页面 并且修改到token对应上
            
          }else{
            $verify = stripslashes(trim($_GET['verify']));
            $time = time();
            $where['token'] = $verify;
            $reader = $Reader -> where($where)->find();
            if($reader['token_exptime'] < $time){
              // 超时
              $this->redirect('Index/index','',0.001,'<script>alert("该链接已经失效");</script>');
              exit;
            }
            $this->assign('id',$reader['id']);
          $this->display();
      }
    }
/**
 * send email by swiftmailer
 *
 * @param  string|array $to      收件人
 * @param  string       $subject 主题
 * @param  string       $content 内容
 * @return int          发送的邮件数目
 */
function send_email($to, $subject, $content)
{
    vendor('swiftmailer.swift_required');
    // $transport = Swift_SmtpTransport::newInstance(C('SWIFT_HOST'), 25)
        $transport = Swift_SmtpTransport::newInstance(C('SWIFT_HOST'), 465, 'ssl')
                    ->setUsername(C('SWIFT_USERNAME'))
                    ->setPassword(C('SWIFT_PASSWORD'));


    $mailer  = Swift_Mailer::newInstance($transport);
    $message = Swift_Message::newInstance()
                    ->setSubject($subject)
                    ->setFrom(array(C('SWIFT_USERNAME') => '某某某'))
                    ->setTo($to)
                    ->setBody($content, 'text/html', 'utf-8');


    return $mailer->send($message);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值