关于通过邮箱找回密码的实现
生活随笔
收集整理的這篇文章主要介紹了
关于通过邮箱找回密码的实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先要自己配置下自己所使用的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);
}
總結
以上是生活随笔為你收集整理的关于通过邮箱找回密码的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 返回链表的中间结点
- 下一篇: vim 文本编辑器 基本操作