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

来源:互联网 发布:swift playground mac 编辑:程序博客网 时间:2024/04/29 07:21
首先要自己配置下自己所使用的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);}

原创粉丝点击