邮件扩展

1.在app目录下创建common.php文件(公共文件)

2.下载邮件扩展

composer require phpmailer/phpmailer

3.在common.php文件中编写发送邮件函数

<?php
namespace App;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
function mailto($to,$title,$content)
{$mail = new PHPMailer(true);                              // Passing `true` enables exceptionstry {//服务器配置$mail->CharSet ="UTF-8";                     //设定邮件编码$mail->SMTPDebug = 0;                        // 调试模式输出$mail->isSMTP();                             // 使用SMTP$mail->Host = 'smtp.qq.com';                // SMTP服务器$mail->SMTPAuth = true;                      // 允许 SMTP 认证$mail->Username = '1297611128@qq.com';         // SMTP 用户名  即邮箱的用户名$mail->Password = 'cqrxusqyehxkgfhc';             // SMTP 密码  部分邮箱是授权码(例如163邮箱)$mail->SMTPSecure = 'ssl';                    // 允许 TLS 或者ssl协议$mail->Port = 465;                            // 服务器端口 25 或者465 具体要看邮箱服务器支持$mail->setFrom('1297611128@qq.com','黄昌龙');  //发件人$mail->addAddress($to);  // 收件人$mail->isHTML(true);                                  // 是否以HTML文档格式发送  发送后客户端可直接显示对应HTML内容$mail->Subject = $title;$mail->Body    = $content;return $mail->send();  //返回发送得到结果} catch (Exception $e) {exception($mail->ErrorInfo);}
}

4.在composer.json中添加以下代码,并执行composer dump-autoload命令

忘记密码

1.创建forget方法和reset方法路由

代码如下

Route::group(['prefix'=>'admin','namespace'=>'Admin'],function (){//登录Route::match(['get','post'],'/','Index@login');//注册Route::match(['get','post'],'register','Index@register');//忘记密码Route::match(['get','post'],'forget','Index@forget');//重置密码Route::match(['get','post'],'reset','Index@reset');
});

2.引入HTML模板

forget.blade.php主要代码如下:

<form><div class="loginbox-title">忘记密码</div><div class="loginbox-or"><div class="or-line"></div></div><div class="loginbox-textbox"><input type="text" class="form-control" name="username" placeholder="请输入用户名" /></div><div class="loginbox-textbox"><input type="text" class="form-control" name="email" placeholder="请输入邮箱" /></div><div class="loginbox-submit"><input type="submit" id="sendCode" class="btn btn-primary btn-block" value="发送验证码"></div><div class="loginbox-signup"><a href="{{url('admin')}}">返回登录</a></div>
</form>

3.通过jquery的ajax提交数据给Index控制器中的forget方法

代码如下:

    $(function () {$('#sendCode').click(function () {$.ajax({url:"{{url('admin/forget')}}",type:'post',data:$('form').serialize(),dataType:'json',success:function (data) {if (data.code==1){layer.msg(data.msg,{icon:6,time:2000,},function () {location.href=data.url;});}else{layer.open({title:"发送失败",content:data.msg,icon:5,anim:6})}}});return false;});});

4.编写Index控制器中forget方法,并接受前端传过来的数据,处理后将其传到Admin模型的forget方法处理

代码如下:

    //忘记密码public function forget(){if (request()->isMethod('post')){$data=request()->only(['username','email']);$result=(new Admin())->forget($data);if ($result==1){$msg=['code'=>1,'msg'=>"验证码发送成功",'url'=>url('admin/reset'),];}else{$msg=['code'=>0,'msg'=>$result,];}return $msg;}return view('admin.index.forget');}

5.编写Admin模型中forget代码,处理控制器传过来的数据,创建验证器,对数据进行验证,利用session存储验证码和用户名。

    public function forget($data){$rule=['username'=>'bail|required','email'=>'required',];$msg=['username.required'=>'用户名不能为空','email.required'=>'邮箱不能为空',];$validator=Validator::make($data,$rule,$msg);if ($validator->fails()){return $validator->errors()->first();}$adminData=$this->where($data)->first();if ($adminData){$code=rand(1000,9999);//产生随机验证码$result=mailto($adminData['email'],'您的重置密码验证码',$code);if ($result){session(['code'=>$code]);session(['email'=>$adminData['email']]);return 1;}}else{return "用户名或邮箱错误";}}

重置密码

1.引入HTML文件reset.blade.php

<form><div class="loginbox-title">重置密码</div><div class="loginbox-or"><div class="or-line"></div></div><div class="loginbox-textbox"><input type="text" class="form-control" name="newpassword" placeholder="请输入新密码" /></div><div class="loginbox-textbox"><input type="text" class="form-control" name="code" placeholder="请输入验证码" /></div><div class="loginbox-submit"><input type="submit" id="reset" class="btn btn-primary btn-block" value="重置密码"></div><div class="loginbox-signup"><a href="{{url('admin')}}">返回登录</a></div></form>

2.用过jquery的ajax将新密码和验证码提交给Index控制器的reset方法处理

代码如下:

    $(function () {$('#reset').click(function () {$.ajax({url:"{{url('admin/reset')}}",type:'post',data:$('form').serialize(),dataType:'json',success:function (data) {if (data.code==1){layer.msg(data.msg,{icon:6,time:2000,},function () {location.href=data.url;});}else{layer.open({title:"密码重置失败",content:data.msg,icon:5,anim:6})}}});return false;});});

3.编写Index控制器中reset方法,接收新密码和验证码,并传给Admin模型的reset方法处理

代码如下:

    public function reset(){if (request()->isMethod('post')){$data=request()->only(['newpassword','code']);$result=(new Admin())->reset($data);if ($result==1){$msg=['code'=>1,'msg'=>'重置密码成功','url'=>url('admin')];}else{$msg=['code'=>0,'msg'=>$result];}return  $msg;}return view('admin.index.reset');}

4.编写Admin模型中reset方法,创建验证器验证数据

代码如下:

    //重置密码public function reset($data){$rule=['newpassword'=>'bail|required','code'=>'required',];$msg=['newpassword'=>'新密码不能为空','code.required'=>'验证码不能为空',];$validator=Validator::make($data,$rule,$msg);if ($validator->fails()){return $validator->errors()->first();}if (session('code')==$data['code']){$adminData=$this->where('email',session('email'))->first();$adminData->password=$data['newpassword'];$result=$adminData->save();if ($result){return 1;}else{return "密码重置失败";}}else{return '验证码错误';}}

效果图如下:

Laravel博客系统开发--邮件操作(忘记/重置密码)相关推荐

  1. Laravel博客系统开发--登录功能

    登录功能 1.定义一条路由 Route::group(['prefix'=>'admin','namespace'=>'Admin'],function (){//登录Route::mat ...

  2. 个人博客系统开发总结之 mybatis操作blob字段

    mybaits通过mapper文件进行数据库的增删改查操作,在进行增删改查操作时需要将java的数据类型与数据库的数据类型进行转换,此时就会用到TypeHandler类型处理器.mybatis内置了j ...

  3. 和lock一起学beego 博客系统开发为例(五)

    为什么80%的码农都做不了架构师?>>>    接着上篇来写<和lock一起学beego 博客系统开发为例(四)> 这篇主要完成以下事项: 下篇我们要完成下面三个任务: ...

  4. 视频教程-python项目之博客系统开发-Python

    python项目之博客系统开发 TriAquae开源运维软件创始人,混迹IT运维领域多年,曾就职于松下.国政通.飞信.中金.NOKIA等公司,维护过少至几十台,多至数万台设备的IT系统,致力于提高企业 ...

  5. python项目之博客系统开发-李杰-专题视频课程

    python项目之博客系统开发-3133人已学习 课程介绍         系统由于主站.个人博客.后台管理三部分组成,其中包含Web开发中的知识,如:多级评论.文章点赞.主题定制.iframe伪Aj ...

  6. 和lock一起学beego 博客系统开发为例(六)

    为什么80%的码农都做不了架构师?>>>    接着上篇来写<和lock一起学beego 博客系统开发为例(五)> 这篇主要完成以下事项: 下篇我们要完成下面三个任务: ...

  7. 【SSM架构】博客系统开发(七)-登陆界面

    [SSM架构]博客系统开发7-登陆界面 1 完成效果 2 建login.jsp 3 导入静态资源 4 建login.jsp 5 配置springmvc 6 发布项目,在浏览器地址栏访问 7 所需文件下 ...

  8. uliweb新教程--多人博客系统开发

    2019独角兽企业重金招聘Python工程师标准>>> 开始写一个uliweb的新教程,主要围绕着一个多人博客系统的开发来写.下面是我想实现的功能: blog功能 blog首页展示 ...

  9. JSP~Qing博客系统开发

    本篇文章主要对自己做的一个C#识别软件.一个Web博客系统做项目总结. 一.ToTool识别转换助手 软件打包之后在我电脑上运行正常,识别印刷体没有问题,但在不同系统不同电脑下运行会出问题.因为核心算 ...

最新文章

  1. Btrace入门到熟练小工完全指南
  2. C++知识点22——使用C++标准库(顺序容器list的初始化、赋值、访问、交换、添加、删除与迭代器失效)
  3. dicom文件_图像识别 | 使用Python对医学Dicom文件的预处理(含代码)
  4. const深度总结(effective C++)
  5. java 强制下线_【java】如何强制app端强制下线?
  6. LeetCode 47. 全排列 II(回溯+搜索剪枝)
  7. (转)Windows Form Application 读取并修改App.config文件
  8. 如何导入gradle版本不同的Android项目
  9. 京东静态网页设计案例(1)
  10. 安装程序无法打开注册表项 UNKNOWN\Components\…解决办法
  11. persevere的用法_努力奋斗的英文短语 努力的英文意思是
  12. 【saltstack】配置salt-master端REDIS_RETURN
  13. centos7.8 swoole安装和使用
  14. Arcgis使用自定义的图标库-地图POI图标风格
  15. 抖音seo企业号,矩阵同步分发,抖音搜索框SEO优化系统搭建。
  16. python计算平均值标准差和中位数_如何使用python求平均数、方差、中位数
  17. 锐捷交换机,路由器,无线,ESS,EG所有操作配置命令合集
  18. 分享一个好用的护眼google插件
  19. MATLAB运动车辆检测系统
  20. python期中考试试卷分析_学校期中考试试卷分析和总结

热门文章

  1. 【多模态】MoE解决多模态单双塔问题 VLMo: Unifified Vision-Language Pre-Training with Mixture-of-Modality-Experts
  2. mysql的for循环语句_Mysql实现for循环遍历
  3. HTML5开发基础与应用
  4. 北京应用物理计算机研究所九所,青年才俊话成长 | 陈明娟:情满九所,依依不舍...
  5. VBA学习笔记8:单元格的合并与拆分
  6. 灰狼进化算法简介及启发式算法的本质
  7. 设计模式之我爱我家(下)
  8. 网易面试题:男女小孩战队问题
  9. 有什么微软各种服务器,除了Windows操作系统 微软还有什么?
  10. Android 使用RecyclerView 实现 tag 展示