国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

172 lines
5.9KB

  1. <?php if(!defined('DEDEMEMBER')) exit("dedecms");
  2. /**
  3. * 密码函数
  4. *
  5. * @version $Id: inc_pwd_functions.php 1 15:18 2010年7月9日Z tianya $
  6. * @package DedeCMS.Member
  7. * @copyright Copyright (c) 2007 - 2020, DesDev, Inc.
  8. * @license http://help.dedecms.com/usersguide/license.html
  9. * @link http://www.dedecms.com
  10. */
  11. /**
  12. * 验证码生成函数
  13. *
  14. * @param int $length 需要生成的长度
  15. * @param int $numeric 是否为数字
  16. * @return string
  17. */
  18. function random($length, $numeric = 0)
  19. {
  20. PHP_VERSION < '4.2.0' && mt_srand((double)microtime() * 1000000);
  21. if($numeric)
  22. {
  23. $hash = sprintf('%0'.$length.'d', mt_rand(0, pow(10, $length) - 1));
  24. }
  25. else
  26. {
  27. $hash = '';
  28. $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
  29. $max = strlen($chars) - 1;
  30. for($i = 0; $i < $length; $i++)
  31. {
  32. $hash .= $chars[mt_rand(0, $max)];
  33. }
  34. }
  35. return $hash;
  36. }
  37. /**
  38. * 邮件发送函数
  39. *
  40. * @param string $email E-mail地址
  41. * @param string $mailtitle E-mail标题
  42. * @param string $mailbody E-mail内容
  43. * @param string $headers 头信息
  44. * @return void
  45. */
  46. function sendmail($email, $mailtitle, $mailbody, $headers)
  47. {
  48. global $cfg_sendmail_bysmtp, $cfg_smtp_server, $cfg_smtp_port, $cfg_smtp_usermail, $cfg_smtp_user, $cfg_smtp_password, $cfg_adminemail;
  49. if($cfg_sendmail_bysmtp == 'Y')
  50. {
  51. $mailtype = 'TXT';
  52. require_once(DEDEINC.'/mail.class.php');
  53. $smtp = new smtp($cfg_smtp_server,$cfg_smtp_port,true,$cfg_smtp_usermail,$cfg_smtp_password);
  54. $smtp->debug = false;
  55. $smtp->sendmail($email,$cfg_webname,$cfg_smtp_usermail, $mailtitle, $mailbody, $mailtype);
  56. } else {
  57. @mail($email, $mailtitle, $mailbody, $headers);
  58. }
  59. }
  60. /**
  61. * 发送邮件;type为INSERT新建验证码,UPDATE修改验证码;
  62. *
  63. * @param int $mid 会员ID
  64. * @param int $userid 用户ID
  65. * @param string $mailto 发送到
  66. * @param string $type 类型
  67. * @param string $send 发送到
  68. * @return string
  69. */
  70. function newmail($mid, $userid, $mailto, $type, $send)
  71. {
  72. global $db,$cfg_adminemail,$cfg_webname,$cfg_basehost,$cfg_memberurl;
  73. $mailtime = time();
  74. $randval = random(8);
  75. $mailtitle = $cfg_webname.":密码修改";
  76. $mailto = $mailto;
  77. $headers = "From: ".$cfg_adminemail."\r\nReply-To: $cfg_adminemail";
  78. $mailbody = "亲爱的".$userid.":\r\n您好!感谢您使用".$cfg_webname."网。\r\n".$cfg_webname."应您的要求,重新设置密码:(注:如果您没有提出申请,请检查您的信息是否泄漏。)\r\n本次临时登录密码为:".$randval." 请于三天内登录下面网址确认修改。\r\n".$cfg_basehost.$cfg_memberurl."/resetpassword.php?dopost=getpasswd&id=".$mid;
  79. if($type == 'INSERT')
  80. {
  81. $key = md5($randval);
  82. $sql = "INSERT INTO `#@__pwd_tmp` (`mid` ,`membername` ,`pwd` ,`mailtime`)VALUES ('$mid', '$userid', '$key', '$mailtime');";
  83. if($db->ExecuteNoneQuery($sql))
  84. {
  85. if($send == 'Y')
  86. {
  87. sendmail($mailto,$mailtitle,$mailbody,$headers);
  88. return ShowMsg('EMAIL修改验证码已经发送到原来的邮箱请查收', 'login.php','','5000');
  89. } else if ($send == 'N')
  90. {
  91. return ShowMsg('稍后跳转到修改页', $cfg_basehost.$cfg_memberurl."/resetpassword.php?dopost=getpasswd&amp;id=".$mid."&amp;key=".$randval);
  92. }
  93. }
  94. else
  95. {
  96. return ShowMsg('对不起修改失败,请联系管理员', 'login.php');
  97. }
  98. }
  99. elseif($type == 'UPDATE')
  100. {
  101. $key = md5($randval);
  102. $sql = "UPDATE `#@__pwd_tmp` SET `pwd` = '$key',mailtime = '$mailtime' WHERE `mid` ='$mid';";
  103. if($db->ExecuteNoneQuery($sql))
  104. {
  105. if($send == 'Y')
  106. {
  107. sendmail($mailto,$mailtitle,$mailbody,$headers);
  108. ShowMsg('EMAIL修改验证码已经发送到原来的邮箱请查收', 'login.php');
  109. }
  110. elseif($send == 'N')
  111. {
  112. return ShowMsg('稍后跳转到修改页', $cfg_basehost.$cfg_memberurl."/resetpassword.php?dopost=getpasswd&amp;id=".$mid."&amp;key=".$randval);
  113. }
  114. }
  115. else
  116. {
  117. ShowMsg('对不起修改失败,请与管理员联系', 'login.php');
  118. }
  119. }
  120. }
  121. /**
  122. * 查询会员信息mail用户输入邮箱地址;userid用户名
  123. *
  124. * @param string $mail 邮件
  125. * @param string $userid 用户ID
  126. * @return string
  127. */
  128. function member($mail, $userid)
  129. {
  130. global $db;
  131. $sql = "SELECT mid,email,safequestion FROM #@__member WHERE email='$mail' AND userid = '$userid'";
  132. $row = $db->GetOne($sql);
  133. if(!is_array($row)) return ShowMsg("对不起,用户ID输入错误!","-1");
  134. else return $row;
  135. }
  136. /**
  137. * 查询是否发送过验证码
  138. *
  139. * @param string $mid 会员ID
  140. * @param string $userid 用户名称
  141. * @param string $mailto 发送邮件地址
  142. * @param string $send 为Y发送邮件,为N不发送邮件默认为Y
  143. * @return string
  144. */
  145. function sn($mid,$userid,$mailto, $send = 'Y')
  146. {
  147. global $db;
  148. $tptim= (60*10);
  149. $dtime = time();
  150. $sql = "SELECT * FROM #@__pwd_tmp WHERE mid = '$mid'";
  151. $row = $db->GetOne($sql);
  152. if(!is_array($row))
  153. {
  154. //发送新邮件;
  155. newmail($mid,$userid,$mailto,'INSERT',$send);
  156. }
  157. //10分钟后可以再次发送新验证码;
  158. elseif($dtime - $tptim > $row['mailtime'])
  159. {
  160. newmail($mid,$userid,$mailto,'UPDATE',$send);
  161. }
  162. //重新发送新的验证码确认邮件;
  163. else
  164. {
  165. return ShowMsg('对不起,请10分钟后再重新申请', 'login.php');
  166. }
  167. }