通过thinkPHP框架通过邮箱找到数据库的密码并发送邮件告知用户;

1:登录html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>用户登录</title><!--__PUBLIC__模板替换--><link rel="stylesheet" type="text/css" href="__PUBLIC__/css/styles.css"><link rel="stylesheet" href="__PUBLIC__/layui/css/layui.css">
</head>
<body>
<div class="htmleaf-container"><div class="wrapper"><div class="container"><h1>欢迎,请登录</h1><form class="form" action="userLogin" method="post"><input type="text"  name="userName" placeholder="请输入账号"><input type="password" name="userPassword" placeholder="请输入密码"><input type="Submit"  name="Submit" value="登录"/><!--<a href="{:U('register/index')}">--><!--<input type="button"  value="注册"/>--><!--</a>--><a href="{:U('login/lost')}"><input type="button"  value="忘记密码"/></a><!--<a href="{:U('homepage/index')}">--><!--<input type="button"  value="返回首页"/>--><!--</a>--></form></div><ul class="bg-bubbles"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul></div>
</div><script src="__PUBLIC__/js/jquery-2.1.1.min.js"></script>
<script>$('#login-button').click(function (event) {event.preventDefault();$('form').fadeOut(500);$('.wrapper').addClass('form-success');});</script>
</body>
</html>

2:找回密码HTML

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>找回密码</title><!--__PUBLIC__模板替换--><link rel="stylesheet" type="text/css" href="__PUBLIC__/css/styles.css"><link rel="stylesheet" href="__PUBLIC__/layui/css/layui.css">
</head>
<body>
<div class="htmleaf-container"><div class="wrapper"><div class="container"><h1>欢迎,找回密码</h1><form class="form" action="getLost" method="post"><input type="text" name="Uname" placeholder="请输入账号" required lay-verify="required" autocomplete="off"><input type="email" name="Uemail" placeholder="请输入绑定的邮箱" required lay-verify="required" autocomplete="off"><input type="Submit" name="Submit" value="找回密码"/><a href="{:U('login/index')}"><input type="button" name="button" value="返回"/></a></form></div><ul class="bg-bubbles"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul></div>
</div><script src="__PUBLIC__/js/jquery-2.1.1.min.js"></script>
<script>$('#login-button').click(function (event) {event.preventDefault();$('form').fadeOut(500);$('.wrapper').addClass('form-success');});function Regbtn() {location.href = "";}</script>
</body>
</html>

3:控制器

<?phpnamespace Home\Controller;use Think\Controller;
use Home\Common\Smtp;header('Content-Type:text/html; charset=utf-8');
header('charset=utf-8');class LoginController extends Controller
{public function index(){$this->display();}public function userLogin(){$username = I('userName');$password = I('userPassword');$user = M('user')->where("Uname='{$username}'")->find();
//        var_dump($user);if (!$user) {$this->error('账号不存在', U('Login/index'), 3);}if ($user['upassword'] == $password) {
//            $_SESSION['username'] = $username;//使用thinkPHP session支持session('username', $username);$this->success('登录成功', U('Homepage/index'), 3);} else {$this->error('密码错误');}}public function logout(){session(null);$this->success('退出成功', U('Homepage/index'), 3);}//    找回密码public function lost(){$this->display('lost');}public function getLost(){
//******************** 配置信息 ********************************$smtpserver = "smtp.163.com";//SMTP服务器$smtpserverport = 25;//SMTP服务器端口$smtpusermail = "xxxxx@163.com";//SMTP服务器的用户邮箱(你的163邮箱)$smtpemailto = $_POST["Uemail"];//发送给谁$smtpuser = "xxxx";//SMTP服务器的用户帐号,注:部分邮箱只需@前面的用户名(你的163邮箱@之前的)$smtppass = "xxx";//SMTP服务器的用户密码(在163邮箱设置里面可以申请设置SMTP服务器密码)$mailtitle = "找回密码提醒";//邮件主题$pattern = "/([a-z0-9]*[-_.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[.][a-z]{2,3}([.][a-z]{2})?/i";$username = I('Uname');$email = I('Uemail');
//        echo $username,$email;$user = M('user')->where("Uname='{$username}'")->find();
//        dump($user) ;
//        dump($email);
//        dump($user['uemail']);if (!$user) {$this->error('没有该用户', U('login/lost'), 3);} elseif (!($user['uemail'] == $email)) {$this->error('邮箱不正确', U('login/lost'), 3);} else {$conn = mysqli_connect("localhost", "root", "", "hotel");$result = mysqli_query($conn, "SELECT Upassword,Uemail FROM m_user WHERE Uname='$username'");if (mysqli_num_rows($result) > 0) {while ($row = mysqli_fetch_array($result)) {if ($row['Uemail'] == $email) {$psw = $row['Upassword'];$this->success('邮件发送成功,请查收', U('login/index'));break;} else {$this->error('错误', U('login/lost'));}}}}$mailcontent = "<h2>您的密码是:{$psw}<br>(若不是本人操作请忽略)</h2>";//邮件内容$mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件//************************ 配置信息 ****************************$smtp = new Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证.$smtp->debug = false;//是否显示发送的调试信息$state = $smtp->sendmail($smtpemailto, $smtpusermail, $mailtitle, $mailcontent, $mailtype);}
}

4:Smtp类文件

<?php
namespace Home\Common;
class Smtp
{/* Public Variables */public $smtp_port;public $time_out;public $host_name;public $log_file;public $relay_host;public $debug;public $auth;public $user;public $pass;/* Private Variables */private $sock;/* Constractor */function __construct($relay_host = "", $smtp_port = 25,$auth = false,$user,$pass){$this->debug = FALSE;$this->smtp_port = $smtp_port;$this->relay_host = $relay_host;$this->time_out = 30; //is used in fsockopen()$this->auth = $auth;//auth$this->user = $user;$this->pass = $pass;$this->host_name = "localhost"; //is used in HELO command$this->log_file = "";$this->sock = FALSE;}/* Main Function */function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = ""){$mail_from = $this->get_address($this->strip_comment($from));$body = preg_replace("/(^|(\r\n))(\.)/", "\1.\3", $body);$header = "MIME-Version:1.0\r\n";if($mailtype=="HTML"){$header .= "Content-Type:text/html\r\n";}$header .= "To: ".$to."\r\n";if ($cc != "") {$header .= "Cc: ".$cc."\r\n";}$header .= "From: $from<".$from.">\r\n";$header .= "Subject: ".$subject."\r\n";$header .= $additional_headers;$header .= "Date: ".date("r")."\r\n";$header .= "X-Mailer:By Redhat (PHP/".phpversion().")\r\n";list($msec, $sec) = explode(" ", microtime());$header .= "Message-ID: <".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from.">\r\n";$TO = explode(",", $this->strip_comment($to));if ($cc != "") {$TO = array_merge($TO, explode(",", $this->strip_comment($cc)));}if ($bcc != "") {$TO = array_merge($TO, explode(",", $this->strip_comment($bcc)));}$sent = TRUE;foreach ($TO as $rcpt_to) {$rcpt_to = $this->get_address($rcpt_to);if (!$this->smtp_sockopen($rcpt_to)) {$this->log_write("Error: Cannot send email to ".$rcpt_to."\n");$sent = FALSE;continue;}if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)) {$this->log_write("E-mail has been sent to <".$rcpt_to.">\n");} else {$this->log_write("Error: Cannot send email to <".$rcpt_to.">\n");$sent = FALSE;}fclose($this->sock);$this->log_write("Disconnected from remote host\n");}return $sent;}/* Private Functions */function smtp_send($helo, $from, $to, $header, $body = ""){if (!$this->smtp_putcmd("HELO", $helo)) {return $this->smtp_error("sending HELO command");}//authif($this->auth){if (!$this->smtp_putcmd("AUTH LOGIN", base64_encode($this->user))) {return $this->smtp_error("sending HELO command");}if (!$this->smtp_putcmd("", base64_encode($this->pass))) {return $this->smtp_error("sending HELO command");}}if (!$this->smtp_putcmd("MAIL", "FROM:<".$from.">")) {return $this->smtp_error("sending MAIL FROM command");}if (!$this->smtp_putcmd("RCPT", "TO:<".$to.">")) {return $this->smtp_error("sending RCPT TO command");}if (!$this->smtp_putcmd("DATA")) {return $this->smtp_error("sending DATA command");}if (!$this->smtp_message($header, $body)) {return $this->smtp_error("sending message");}if (!$this->smtp_eom()) {return $this->smtp_error("sending <CR><LF>.<CR><LF> [EOM]");}if (!$this->smtp_putcmd("QUIT")) {return $this->smtp_error("sending QUIT command");}return TRUE;}function smtp_sockopen($address){if ($this->relay_host == "") {return $this->smtp_sockopen_mx($address);} else {return $this->smtp_sockopen_relay();}}function smtp_sockopen_relay(){$this->log_write("Trying to ".$this->relay_host.":".$this->smtp_port."\n");$this->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out);if (!($this->sock && $this->smtp_ok())) {$this->log_write("Error: Cannot connenct to relay host ".$this->relay_host."\n");$this->log_write("Error: ".$errstr." (".$errno.")\n");return FALSE;}$this->log_write("Connected to relay host ".$this->relay_host."\n");return TRUE;}function smtp_sockopen_mx($address){$domain = preg_replace("/^.+@([^@]+)$/", "\1", $address);if (!@getmxrr($domain, $MXHOSTS)) {$this->log_write("Error: Cannot resolve MX \"".$domain."\"\n");return FALSE;}//专注与php学习 http://www.daixiaorui.com 欢迎您的访问foreach ($MXHOSTS as $host) {$this->log_write("Trying to ".$host.":".$this->smtp_port."\n");$this->sock = @fsockopen($host, $this->smtp_port, $errno, $errstr, $this->time_out);if (!($this->sock && $this->smtp_ok())) {$this->log_write("Warning: Cannot connect to mx host ".$host."\n");$this->log_write("Error: ".$errstr." (".$errno.")\n");continue;}$this->log_write("Connected to mx host ".$host."\n");return TRUE;}$this->log_write("Error: Cannot connect to any mx hosts (".implode(", ", $MXHOSTS).")\n");return FALSE;}function smtp_message($header, $body){fputs($this->sock, $header."\r\n".$body);$this->smtp_debug("> ".str_replace("\r\n", "\n"."> ", $header."\n> ".$body."\n> "));return TRUE;}function smtp_eom(){fputs($this->sock, "\r\n.\r\n");$this->smtp_debug(". [EOM]\n");return $this->smtp_ok();}function smtp_ok(){$response = str_replace("\r\n", "", fgets($this->sock, 512));$this->smtp_debug($response."\n");if (!preg_match("/^[23]/", $response)) {fputs($this->sock, "QUIT\r\n");fgets($this->sock, 512);$this->log_write("Error: Remote host returned \"".$response."\"\n");return FALSE;}return TRUE;}function smtp_putcmd($cmd, $arg = ""){if ($arg != "") {if($cmd=="") $cmd = $arg;else $cmd = $cmd." ".$arg;}fputs($this->sock, $cmd."\r\n");$this->smtp_debug("> ".$cmd."\n");return $this->smtp_ok();}function smtp_error($string){$this->log_write("Error: Error occurred while ".$string.".\n");return FALSE;}function log_write($message){$this->smtp_debug($message);if ($this->log_file == "") {return TRUE;}$message = date("M d H:i:s ").get_current_user()."[".getmypid()."]: ".$message;if (!@file_exists($this->log_file) || !($fp = @fopen($this->log_file, "a"))) {$this->smtp_debug("Warning: Cannot open log file \"".$this->log_file."\"\n");return FALSE;}flock($fp, LOCK_EX);fputs($fp, $message);fclose($fp);return TRUE;}function strip_comment($address){$comment = "/\([^()]*\)/";while (preg_match($comment, $address)) {$address = preg_replace($comment, "", $address);}return $address;}function get_address($address){$address = preg_replace("/([ \t\r\n])+/", "", $address);$address = preg_replace("/^.*<(.+)>.*$/", "\1", $address);return $address;}function smtp_debug($message){if ($this->debug) {echo $message;}}}

5:数据库配置

 /* 数据库设置 */'DB_TYPE'               =>  'mysql',     // 数据库类型'DB_HOST'               =>  'localhost', // 服务器地址'DB_NAME'               =>  'email',          // 数据库名'DB_USER'               =>  'root',      // 用户名'DB_PWD'                =>  '',          // 密码'DB_PORT'               =>  '3306',        // 端口'DB_PREFIX'             =>  'm_',    // 数据库表前缀

6:请将数据库的邮箱Uemail换成自己的;

7:登录注册功能暂未连接;运行url:xxxx/sendEmail/index.php/home/login/index,前面为你自己的路径

完整demo下载地址:https://download.csdn.net/download/weixin_42545184/10897367

有疑问可以留言,有错误请指导。

thinkPHP+layui邮箱找回密码完整附代码参考相关推荐

  1. java 邮箱找回密码_【JavaWeb】通过邮件找回密码

    前言 本文将介绍忘记密码时通过发送重置密码邮件找回密码的实现思路.整个实现过程中最重要的就是以下三点: 如何发送邮件到用户指定邮箱 邮件中的重置密码链接构成是怎么样的 验证重置密码链接的合法性(是否过 ...

  2. java实现通过绑定邮箱找回密码功能_SpringMVC通过邮件找回密码功能的实现

    1.最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的功能我就不说了,重点讲找回密 ...

  3. java邮箱找回密码_Spring实现简单的邮箱找回密码功能

    通过spring可以实现简单的邮箱找回密码的功能,在此做一下简单的笔记. 1.首先就是导入一些相关的jar包 2.加入配置文件,具体配置信息如下: encoding="UTF-8" ...

  4. Java实现邮箱找回密码

    通过邮件找回密码功能的实现 1.最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的 ...

  5. SpringBoot实现通过邮箱找回密码功能

    养成习惯,先赞后看!!! 目录 1.前言 2.步骤 2.1导入依赖 2.2开启邮箱的SMTP服务 2.3配置application.yaml文件 2.4 编写逻辑的步骤 2.4.1创建pm_valid ...

  6. JavaWeb QQ邮箱找回密码

    我的上一篇博客,已经写了登录注册,接下来写QQ邮箱找回密码 首先:我们需要在 QQ邮箱设置中获取授权码,步骤如下 进入QQ邮箱---->设置---->账户---->开启服务:POP3 ...

  7. java 基于springboot邮箱找回密码功能

    一.主要内容 基于springboot实现密码找回功能. 二.邮箱找回密码的思想. 1.输入注册邮箱,点击获取验证码.会将验证码发送到邮箱. 2.用户进入邮箱,查看验证码. 3.用户输入验证码,输入新 ...

  8. AspNetCore-MVC实战系列(二)之通过绑定邮箱找回密码

    AspNetCore - MVC实战系列目录 . 爱留图网站诞生 . git源码:https://github.com/shenniubuxing3/LovePicture.Web . AspNetC ...

  9. js加mysql写邮箱找回密码_邮箱找回密码实现

    邮箱找回密码实现 思路: 点击邮箱找回:前端给后端服务器发送请求 get:http://127.0.0.1:8000/api/v1/email?email=7777777777@qq.com 后端发送 ...

最新文章

  1. LeetCode简单题之用栈操作构建数组
  2. Selenium测试专项三班隆重开班
  3. SpringMVC框架介绍
  4. Pat乙级 1049 数列的片段和
  5. php简单的mysql类_一个简单的php mysql操作类
  6. windows安装MySQL数据库【附安装文档和安装包】
  7. jquery学习。。
  8. leetcode —— 1282. 用户分组
  9. 从小小后视镜看物联网的生态(上)
  10. 5去掉button按钮的点击样式_各种好看的小按钮合集,纯css编写,最近在学习时遇到的,记录成为笔记...
  11. vbs中使用select case条件语句,case中匹配项多于一个时,提示:type mismathc/ 800A000D...
  12. BCD码干什么用的?
  13. 几种降维思想方法总结
  14. day22 属性 类方法 静态方法 反射 https://www.cnblogs.com/jin-xin/articles/9214247.html
  15. 期货程序化交易接口CTP回测框架的选择
  16. 计算机英语while,while循环用法
  17. JMeter 修改字体大小
  18. 从事大数据行业5年,峰哥总结出了以下 7 条建议
  19. Android系统Recovery工作原理之使用update.zip升级过程分析(一)---update.zip包的制作【转】...
  20. 发起AI联盟,天猫精灵CES布局智能家居市场

热门文章

  1. 理解VUE响应式原理
  2. 银河麒麟server v10sp1编译安装php8.1.6
  3. 快速掌握EasyExcel在web场景中的应用(读和写)
  4. java 构造器的作用_Java构造器的实质作用
  5. C语言二进制方式读写文件数据
  6. 大家好,我是股神牛菲特
  7. Windows上Charles,ios 14设备抓包设置
  8. 文王金钱六十四卦以及Java算卦程序
  9. Linux常用命令大总结
  10. 为什么 deep learning