关于通过邮箱找回密码的实现
生活随笔
收集整理的這篇文章主要介紹了
关于通过邮箱找回密码的实现
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
首先要自己配置下自己所使用的smtp服務(wù)器,這里使用的是QQ的
//郵箱配置項(xiàng)
'SWIFT_HOST'=>'smtp.qq.com',
'SWIFT_USERNAME'=>'XXXX@qq.com',
'SWIFT_PASSWORD'=>'abrsjjqtpfgndccc',
// 驗(yàn)證驗(yàn)證碼
// 通過驗(yàn)證碼后 查找郵箱 然后將該郵箱對(duì)應(yīng)的修改密碼鏈接發(fā)過去
// 該鏈接鏈接到一個(gè)修改方法 通過尋找verify 找到用戶 修改其密碼public function mima(){// 并且設(shè)定好十分鐘后才可以再發(fā)鏈接到郵箱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("輸入錯(cuò)誤");</script>');exit;}// 如果通過了驗(yàn)證 賬號(hào) 和 郵箱 則繼續(xù) 否則redirect + 提示驗(yàn)證碼錯(cuò)誤$where = array();$where['reader_email'] = $_POST['reader_email'];$reader = $Reader -> where($where)->find();// 如果存在該郵箱屬于用戶則繼續(xù)$email = $reader['reader_email'];$username = $reader['reader_name'];$userpwd = $reader['reader_pwd'];$id = $reader['id'];$modtime = time();//創(chuàng)建用于激活識(shí)別碼$token = md5($username.$userpwd.$email.$modtime); //過期時(shí)間為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";//郵箱標(biāo)題//郵箱內(nèi)容$emailbody = "尊敬的".$username.":<br/>請(qǐng)點(diǎn)擊鏈接修改您的帳號(hào)密碼。<br/><a href='".__APPURL__."/$url?verify=".$token."' target='_blank'>".__APPURL__."/$url?verify=".$token."</a><br/>如果以上鏈接無法點(diǎn)擊,請(qǐng)將它復(fù)制到你的瀏覽器地址欄中進(jìn)入訪問,該鏈接10分鐘內(nèi)有效。<br/>如果此次激活請(qǐng)求非你本人所發(fā),請(qǐng)忽略本郵件。<br/><p style='text-align:right'>-------- 敬上</p>";$rs = send_email($email,$emailsubject,$emailbody);//send_email(郵箱,郵箱標(biāo)題,郵箱內(nèi)容);if($rs){$msg = '恭喜您,提交成功!請(qǐng)登錄到您的郵箱修改您的密碼!'; }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){// 記錄你認(rèn)為必要的session$this->redirect('Index/index','',0.001,'<script>alert("修改成功");</script>');exit;}else{$this->redirect('Index/index','',0.001,'<script>alert("修改失敗");</script>');exit;}// 根據(jù)token查找// if OK 并且鏈接未過時(shí) 則提供修改頁面 并且修改到token對(duì)應(yīng)上}else{$verify = stripslashes(trim($_GET['verify']));$time = time();$where['token'] = $verify;$reader = $Reader -> where($where)->find();if($reader['token_exptime'] < $time){// 超時(shí)$this->redirect('Index/index','',0.001,'<script>alert("該鏈接已經(jīng)失效");</script>');exit;}$this->assign('id',$reader['id']);$this->display();}}
/*** send email by swiftmailer** @param? string|array $to? ? ? 收件人* @param? string? ? ? ?$subject 主題* @param? string? ? ? ?$content 內(nèi)容* @return int? ? ? ? ? 發(fā)送的郵件數(shù)目*/
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);
}
總結(jié)
以上是生活随笔為你收集整理的关于通过邮箱找回密码的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 返回链表的中间结点
- 下一篇: vim 文本编辑器 基本操作