必威体育Betway必威体育官网
当前位置:首页 > IT技术

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

时间:2019-10-19 05:13:25来源:IT技术作者:seo实验室小编阅读:86次「手机版」
 

邮箱密码

首先要自己配置下自己所使用的smtp服务器,这里使用的是QQ的
//邮箱配置项
'SWIFT_HOST'=>'smtp.qq.com',
'SWIFT_USERNAME'=>'[email protected]',
'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);
}

相关阅读

没有密码怎么登录别人的QQ(5分钟破解一个qq密码)

【商/家/徽/信/10484866】专业获取微信密码,开房记录查询,手机定位,通话记录查询,查询微信聊天记录,非常靠谱!互联网科技的高速发展

密码学如何保障邮件安全?

密码学在邮件中的应用由来已久,信息加密一直伴随着互联网的发展。在第二次世界大战中,纳粹德国发明了精密的机械加密机Enigma用于电

python3学习笔记之十——利用smtp,通过163邮箱发送邮件

通过smtp发送邮件一直提示在登录的时候身份认证失败,百度了一下才知道163邮箱需要在设置里面开通smtp服务,并且设置授权码,通过第三

人民网怎么发文章 人民网新闻投稿邮箱地址是多少?

人民网新闻投稿邮箱地址是多少?seo实验室传媒专注软文营销多年为您解惑,人民网的投稿邮箱地址是[email protected]。如果是重大

淘宝客丢单如何找回?

淘宝客丢单如何找回,淘宝客推广链接失效或淘宝联盟后台统计不到,淘宝客丢单如何找回呢?淘宝客丢单如何找回的情况,都是相应的解决方

分享到:

栏目导航

推荐阅读

热门阅读