前提:tp3
思路:验证用户名和邮箱,通过后重新设置随机密码,然后发送到对应的邮箱
代码:
1.控制类passwordController.class.php
(1)视图方法zhaohui()
//密码找回
public function zhaohui(){
//传递参数
$this->assign("title",'密码找回');
$this->display();
}
(2)对应视图zhaohui.html
<form class="layui-form" id="passform">
<!--item-->
<div class="layui-row">
<div class="layui-col-lg2 layui-col-md2 layui-col-sm2 layui-col-xs2">
<div style="text-align:right;padding:10px;">账号</div>
</div>
<div class="layui-col-lg10 layui-col-md10 layui-col-sm10 layui-col-xs10">
<div>
<input type="text" name="username" id="username" class="layui-input" lay-verify="required" placeholder="请输入账号" value="jinjin">
</div>
</div>
</div>
<!--item-->
<div class="layui-row">
<div class="layui-col-lg2 layui-col-md2 layui-col-sm2 layui-col-xs2">
<div style="text-align:right;padding:10px;">邮箱</div>
</div>
<div class="layui-col-lg10 layui-col-md10 layui-col-sm10 layui-col-xs10">
<div>
<input type="text" name="email" id="email" class="layui-input" lay-verify="required" placeholder="请输入邮箱" value="3223688658@qq.com">
</div>
</div>
</div>
<!--item-->
<!--item-->
<div class="layui-row">
<div class="layui-col-lg6 layui-col-md6 layui-col-sm6 layui-col-xs6">
<button type="reset" class="layui-btn layui-btn-primary"><a href="/">返回</a></button>
</div>
<div class="layui-col-lg6 layui-col-md6 layui-col-sm6 layui-col-xs6">
<button class="layui-btn layui-btn-danger" lay-submit lay-filter="passform">发送邮件</button>
</div>
</div>
</form>
(2-1)对应js块
<script src="__PUBLIC__/Common/layui-v2.3.0/layui/layui.all.js" media="all"></script>
<script>
layui.use(['layer','element','form'],function(){
var layer = layui.layer,
element = layui.element,
$=layui.jquery;
form = layui.form;
/**/
form.on('submit(passform)',function(data){
$.ajax({
type:'post',
url:"{:U('Password/emailCheck')}",
data:data.field,
dataType:"JSON",
beforeSend:function(XMLHttpRequest){$('#load-img').show()},
success: function(data){
if(data.status==1){
layer.msg('密码重置成功...请登陆邮箱查看你的新密码',{icon:6},function(){
window.location.href="{:U('User/index')}";
});
}else{
layer.msg(data.info,{time:1000});
}
},
complete:function(XMLHttpRequest){$('#load-img').hide()},
error:function(data){
layer.msg('有问题-2');
}
});
return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。
})
});
/*layui框架下的表单提交正确结尾*/
</script>
(3)对应验证方法emailCheck()
//邮箱验证
public function emailCheck(){
//检查账号
$username = I('post.username');
$mail = I('post.email');
if(!$id = D('User')->where(array('username'=>$username,'email'=>$mail))->find()){
$this->error('账号或邮箱错误');
return false;
}
$newpass = mt_rand(100000,999999);
$title = "PHP手册密码重置邮件";
$content = '你的密码已经重置,新密码为:<span style="font-weight:600;color:#f30000;">'.$newpass.'</span><br><a href="http://www.fubaoapp.cn/index.php?m=&c=User&a=index">点击这里及时登录并修改密码</a>';
$salt = D('User')->where(array('username'=>$username))->getField('salt');
$password = md5(md5($newpass).$salt);
if(false==D('User')->where(array('username'=>$username))->setField('password',$password)){
$this->error('重置失败,请联系网站管理员');
}
session(null);
cookie('userid',null);//清空cookie
cookie('username',null);
cookie('password',null);
cookie('nickname',null);
if(SendMail($mail,$title,$content)) {
$this->success('重置成功');
} else {
$this->error('重置失败');
}
}
(4)额外需要的函数SendMail()—在Common/function.php里面
function sendMail($to, $title, $content) {
Vendor('PHPMailer.PHPMailerAutoload');
vendor('PHPMailer.class#phpmailer'); //从PHPMailer目录导class.phpmailer.php类文件
vendor('PHPMailer.class#smtp');
$mail = new PHPMailer(); //实例化
$smtp = new SMTP();
$mail->IsSMTP(); // 启用SMTP
$mail->Host=C('MAIL_HOST'); //smtp服务器的名称(这里以QQ邮箱为例)
$mail->SMTPAuth = C('MAIL_SMTPAUTH'); //启用smtp认证
$mail->Username = C('MAIL_USERNAME'); //发件人邮箱名
$mail->Password = C('MAIL_PASSWORD') ; //163邮箱发件人授权密码
$mail->From = C('MAIL_FROM'); //发件人地址(也就是你的邮箱地址)
$mail->FromName = C('MAIL_FROMNAME'); //发件人姓名
$mail->AddAddress($to,"尊敬的客户");
$mail->WordWrap = 50; //设置每行字符长度
$mail->isHTML(true); // 是否HTML格式邮件
$mail->CharSet=C('MAIL_CHARSET'); //设置邮件编码
$mail->Subject =$title; //邮件主题
//$mail->Body = $content; //邮件内容
$mail->MsgHTML($content);
$mail->AltBody = "为了查看该邮件,请切换到支持 HTML 的邮件客户端"; //邮件正文不支持HTML的备用显示
return($mail->Send());
}
(5)还需要配置config.php在Conf/config.php里面进行设置
'MAIL_HOST' =>'smtp.163.com',//smtp服务器的名称
'MAIL_SMTPAUTH' =>TRUE, //启用smtp认证
'MAIL_USERNAME' =>'你的163邮箱@163.com',//发件人的邮箱名
'MAIL_PASSWORD' =>'你的邮箱授权密码',//163邮箱发件人授权密码
'MAIL_FROM' =>'你的163邮箱@163.com',//发件人邮箱地址
'MAIL_FROMNAME'=>'PHP手册用户账号激活',//邮件标题,根据需要修改
'MAIL_CHARSET' =>'utf-8',//设置邮件编码
'MAIL_isHTML'=>true,
(6)还需要配置一个邮件包------复制即可,不用动。
目录如下:
./ThinkPHP/Library/Vendor/PHPMailer/
里面最需要看的是4个文件:
class.phpmailer.php;
class.pop3.php;
class.smtp.php
SMTP.php
没有研究利索的情况下,别乱去掉里面的文件,直接整包拿来就可以!
(7)效果如下:
PHP手册
(必须先在设置里面绑定邮箱)
如图: