首页>>表单>>PHP+Ajax邮箱找回密码,发送临时链接更新密码用(2016-05-12)

PHP+Ajax邮箱找回密码,发送临时链接更新密码用

 如果没有账号,可以先到这里注册《PHP激活用户注册验证邮箱》

PHP+Ajax邮箱找回密码,发送临时链接更新密码用
赞赏支持
立刻微信赞赏支持 关闭

 

XML/HTML Code
  1. <div class="demo">  
  2.                 <p>用户可以通过邮箱找回密码</p>  
  3.                 <p><strong>输入您注册的电子邮箱,找回密码:</strong></p>  
  4.                 <p  style="margin:20px 0"><input type="text" class="input" name="email" id="email"/><span id="chkmsg"></span></p>  
  5.                 <p><input type="button" class="btn" id="sub_btn" value="提 交"/></p>  
  6.   
  7.             </div>  

 

 

JavaScript Code
  1. <script type="text/javascript">  
  2.             $(function() {  
  3.                 $("#sub_btn").click(function() {  
  4.                     var email = $("#email").val();  
  5.                     var preg = /^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/; //匹配Email  
  6.                     if (email == '' || !preg.test(email)) {  
  7.                         $("#chkmsg").html("请填写正确的邮箱!");  
  8.                     } else {  
  9.                         $("#sub_btn").attr("disabled""disabled").val('提交中..').css("cursor""default");  
  10.                         $.post("sendmail.php", {mail: email}, function(msg) {  
  11.                             if (msg == "noreg") {  
  12.                                 $("#chkmsg").html("该邮箱尚未注册!");  
  13.                                 $("#sub_btn").removeAttr("disabled").val('提 交').css("cursor""pointer");  
  14.                             } else {  
  15.                                 $(".demo").html("<h3>" + msg + "</h3>");  
  16.                             }  
  17.                         });  
  18.                     }  
  19.                 });  
  20.             })  
  21.         </script>  

 sendmail.php

 

PHP Code
  1. require('../../conn.php');  
  2.   
  3. $email = injectChk(stripslashes(trim($_POST['mail'])));  
  4.   
  5. $sql = "select id,username,password from `t_user` where `email`='$email'";  
  6. $query = mysql_query($sql);  
  7. $num = mysql_num_rows($query);  
  8. if ($num == 0) {//该邮箱尚未注册!  
  9.     echo 'noreg';  
  10.     exit;  
  11. else {  
  12.     $row = mysql_fetch_array($query);  
  13.     $getpasstime = time();  
  14.     $uid = $row['id'];  
  15.     $token = md5($uid . $row['username'] . $row['password']);  
  16.     $url = "http://www.freejs.net/demo/556/reset.php?email=" . $email . "&token=" . $token;  
  17.     $time = date('Y-m-d H:i');  
  18.     $result = sendmail($time$email$url);  
  19.     if ($result == 1) {//邮件发送成功  
  20.         $msg = '系统已向您的邮箱发送了一封邮件<br/>请登录到您的邮箱及时重置您的密码!';  
  21.         //更新数据发送时间  
  22.         mysql_query("update `t_user` set `getpasstime`='$getpasstime' where id='$uid '");  
  23.     } else {  
  24.         $msg = $result;  
  25.     }  
  26.     echo $msg;  
  27. }  
  28.   
  29. function sendmail($time$email$url) {  
  30.     require 'class.phpmailer.php';  
  31.     try {  
  32.     $smtpserver ="smtp.163.com";  
  33.     $emailaddress"";  
  34.     $emailpassword"";  
  35.     $email_address$email;  
  36.       
  37.     $mail = new PHPMailer(true); //New instance, with exceptions enabled  
  38.     $body="亲爱的" . $email . ":<br/>您在" . $time . "提交了找回密码请求。请点击下面的链接重置密码(按钮24小时内有效)。<br/><a href='" . $url . "' target='_blank'>" . $url . "</a><br/>如果以上链接无法点击,请将它复制到你的浏览器地址栏中进入访问。<br/>如果您没有提交找回密码请求,请忽略此邮件。";  
  39.       
  40.     $body             = preg_replace('/\\/',''$body); //Strip backslashes  
  41.   
  42.     $mail->IsSMTP();                           // tell the class to use SMTP  
  43.     $mail->SMTPAuth   = true;                  // enable SMTP authentication  
  44.     $mail->Port       = 25;                    // set the SMTP server port  
  45.     $mail->Host       = $smtpserver// SMTP server  
  46.     $mail->Username   = $emailaddress;     // SMTP server username  
  47.     $mail->Password   = $emailpassword;            // SMTP server password  
  48.     $mail->CharSet = "utf-8"//设置字符集编码  
  49.     $mail->IsSendmail();  // tell the class to use Sendmail  
  50.     //如果配置了sendmail这里就用sendmail,本地测试把这个注释掉就可以了  
  51.   
  52.     $mail->AddReplyTo($emailaddress,"freejs.net");  
  53.   
  54.     $mail->From       = $emailaddress;  
  55.     $mail->FromName   = "freejs.net";  
  56.   
  57.     $to = $email_address;  
  58.   
  59.     $mail->AddAddress($to);  
  60.   
  61.     $mail->Subject  = "找回密码";  
  62.   
  63.     $mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"// optional, comment out and test  
  64.     $mail->WordWrap   = 80; // set word wrap  
  65.   
  66.     $mail->MsgHTML($body);  
  67.   
  68.     $mail->IsHTML(true); // send as HTML  
  69.   
  70.     $mail->Send();  
  71.     echo "<div class='sendmail_ok'>恭喜您,注册成功!<br/>请登录到您的邮箱及时激活您的帐号</div>";  
  72.     } catch (phpmailerException $e) {  
  73.         echo $e->errorMessage();  
  74.     }  
  75.       
  76.     //发送邮件结束  
  77.       
  78.       
  79.       
  80.       
  81.      
  82. }  
  83.   
  84. function injectChk($sql_str) { //防止注入  
  85.     $check = eregi('select|insert|update|delete|'|/*|*|../|./|union|into|load_file|outfile'$sql_str);  
  86.     if ($check) {  
  87.         echo('非法字符串');  
  88.         exit();  
  89.     } else {  
  90.         return $sql_str;  
  91.     }  
  92. }  

 


原文地址:http://www.freejs.net/article_biaodan_556.html