国内流行的内容管理系统(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.

151 lines
5.8KB

  1. <?php if (!defined('DEDEMEMBER')) exit("dedebiz");
  2. /**
  3. * 密码函数
  4. *
  5. * @version $Id: inc_pwd_functions.php 1 15:18 2010年7月9日Z tianya $
  6. * @package DedeBIZ.Member
  7. * @copyright Copyright (c) 2020, DedeBIZ.COM
  8. * @license https://www.dedebiz.com/license
  9. * @link https://www.dedebiz.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((float)microtime() * 1000000);
  21. if ($numeric) {
  22. $hash = sprintf('%0' . $length . 'd', mt_rand(0, pow(10, $length) - 1));
  23. } else {
  24. $hash = '';
  25. $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
  26. $max = strlen($chars) - 1;
  27. for ($i = 0; $i < $length; $i++) {
  28. $hash .= $chars[mt_rand(0, $max)];
  29. }
  30. }
  31. return $hash;
  32. }
  33. /**
  34. * 邮件发送函数
  35. *
  36. * @param string $email E-mail地址
  37. * @param string $mailtitle E-mail标题
  38. * @param string $mailbody E-mail内容
  39. * @param string $headers 头信息
  40. * @return void
  41. */
  42. function sendmail($email, $mailtitle, $mailbody, $headers)
  43. {
  44. global $cfg_sendmail_bysmtp, $cfg_smtp_server, $cfg_smtp_port, $cfg_smtp_usermail, $cfg_smtp_user, $cfg_smtp_password, $cfg_adminemail;
  45. if ($cfg_sendmail_bysmtp == 'Y') {
  46. $mailtype = 'TXT';
  47. require_once(DEDEINC . '/mail.class.php');
  48. $smtp = new smtp($cfg_smtp_server, $cfg_smtp_port, true, $cfg_smtp_usermail, $cfg_smtp_password);
  49. $smtp->debug = false;
  50. $smtp->sendmail($email, $cfg_webname, $cfg_smtp_usermail, $mailtitle, $mailbody, $mailtype);
  51. } else {
  52. @mail($email, $mailtitle, $mailbody, $headers);
  53. }
  54. }
  55. /**
  56. * 发送邮件;type为INSERT新建验证码,UPDATE修改验证码;
  57. *
  58. * @param int $mid 会员ID
  59. * @param int $userid 用户ID
  60. * @param string $mailto 发送到
  61. * @param string $type 类型
  62. * @param string $send 发送到
  63. * @return string
  64. */
  65. function newmail($mid, $userid, $mailto, $type, $send)
  66. {
  67. global $db, $cfg_adminemail, $cfg_webname, $cfg_basehost, $cfg_memberurl;
  68. $mailtime = time();
  69. $randval = random(8);
  70. $mailtitle = $cfg_webname . ":密码修改";
  71. $mailto = $mailto;
  72. $headers = "From: " . $cfg_adminemail . "\r\nReply-To: $cfg_adminemail";
  73. $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;
  74. if ($type == 'INSERT') {
  75. $key = md5($randval);
  76. $sql = "INSERT INTO `#@__pwd_tmp` (`mid` ,`membername` ,`pwd` ,`mailtime`)VALUES ('$mid', '$userid', '$key', '$mailtime');";
  77. if ($db->ExecuteNoneQuery($sql)) {
  78. if ($send == 'Y') {
  79. sendmail($mailto, $mailtitle, $mailbody, $headers);
  80. return ShowMsg('EMAIL修改验证码已经发送到原来的邮箱请查收', 'login.php', '', '5000');
  81. } else if ($send == 'N') {
  82. return ShowMsg('稍后跳转到修改页', $cfg_basehost . $cfg_memberurl . "/resetpassword.php?dopost=getpasswd&amp;id=" . $mid . "&amp;key=" . $randval);
  83. }
  84. } else {
  85. return ShowMsg('对不起修改失败,请联系管理员', 'login.php');
  86. }
  87. } elseif ($type == 'UPDATE') {
  88. $key = md5($randval);
  89. $sql = "UPDATE `#@__pwd_tmp` SET `pwd` = '$key',mailtime = '$mailtime' WHERE `mid` ='$mid';";
  90. if ($db->ExecuteNoneQuery($sql)) {
  91. if ($send == 'Y') {
  92. sendmail($mailto, $mailtitle, $mailbody, $headers);
  93. ShowMsg('EMAIL修改验证码已经发送到原来的邮箱请查收', 'login.php');
  94. } elseif ($send == 'N') {
  95. return ShowMsg('稍后跳转到修改页', $cfg_basehost . $cfg_memberurl . "/resetpassword.php?dopost=getpasswd&amp;id=" . $mid . "&amp;key=" . $randval);
  96. }
  97. } else {
  98. ShowMsg('对不起修改失败,请与管理员联系', 'login.php');
  99. }
  100. }
  101. }
  102. /**
  103. * 查询会员信息mail用户输入邮箱地址;userid用户名
  104. *
  105. * @param string $mail 邮件
  106. * @param string $userid 用户ID
  107. * @return string
  108. */
  109. function member($mail, $userid)
  110. {
  111. global $db;
  112. $sql = "SELECT mid,email,safequestion FROM #@__member WHERE email='$mail' AND userid = '$userid'";
  113. $row = $db->GetOne($sql);
  114. if (!is_array($row)) return ShowMsg("对不起,用户ID输入错误!", "-1");
  115. else return $row;
  116. }
  117. /**
  118. * 查询是否发送过验证码
  119. *
  120. * @param string $mid 会员ID
  121. * @param string $userid 用户名称
  122. * @param string $mailto 发送邮件地址
  123. * @param string $send 为Y发送邮件,为N不发送邮件默认为Y
  124. * @return string
  125. */
  126. function sn($mid, $userid, $mailto, $send = 'Y')
  127. {
  128. global $db;
  129. $tptim = (60 * 10);
  130. $dtime = time();
  131. $sql = "SELECT * FROM #@__pwd_tmp WHERE mid = '$mid'";
  132. $row = $db->GetOne($sql);
  133. if (!is_array($row)) {
  134. //发送新邮件;
  135. newmail($mid, $userid, $mailto, 'INSERT', $send);
  136. }
  137. //10分钟后可以再次发送新验证码;
  138. elseif ($dtime - $tptim > $row['mailtime']) {
  139. newmail($mid, $userid, $mailto, 'UPDATE', $send);
  140. }
  141. //重新发送新的验证码确认邮件;
  142. else {
  143. return ShowMsg('对不起,请10分钟后再重新申请', 'login.php');
  144. }
  145. }