У меня есть скрипт забытого пароля в PHP ниже. Идея сценария состоит в том, чтобы отправить адрес электронной почты, затем сценарий видит, находится ли адрес электронной почты в базе данных, затем он меняет пароль и затем отправляет электронное письмо с временным адресом на адрес электронной почты, который был отправлен в форме.
Сценарий, по-видимому, изменяет пароль и делает все, кроме того, что он не отправляет письмо с временным паролем.
Прошло много времени с тех пор, как я использовал этот скрипт (или PHP), поэтому любая помощь будет принята с благодарностью.
<?php # forgot_password.php
require_once ('./includes/config.inc.php');
$page_title = 'Forgot Password';
include ('./includes/header.html');
if (isset($_POST['submitted'])) { // Handle the form.
require_once ('database-connection.php');
if (empty($_POST['user_email'])) { //Validate the email address.
$uid = FALSE;
echo 'You forgot to enter your email address!';
} else {
$query = "SELECT ID FROM wp_users WHERE user_email='". escape_data($_POST['user_email']) . "'";
$result = mysql_query ($query)or trigger_error("Query:$query\n<br />MySQL Error: " .mysql_error());
if (mysql_num_rows($result)== 1) {
list($uid) = mysql_fetch_array ($result, MYSQL_NUM);
} else {
echo 'This email address is not registered';
$uid = FALSE;
}
}
if ($uid) { // If everything's OK.
$p = substr ( md5(uniqid(rand(),1)), 3, 10);
$query = "UPDATE wp_users SET user_pass=SHA('$p') WHERE ID=$uid";
$result = mysql_query ($query) or trigger_error("Query: $query\n<br />MySQL Error: " .mysql_error());
if (mysql_affected_rows() == 1) {
$body = "Your password to log into the site has been temporarily changed to '$p'.
Please log in using this password and your username. At that time you may change your password to something more familiar.";
mail($_POST['user_email'], 'Your temporary password.', $body,
'From:[email protected]'); //From email address
echo 'Your password has been temporarily changed.
An email from [email protected] will be sent to your registered email address with a new, temporary password which you can log in with.
Once you have logged in with this password, you may change it by clicking on the "Change Password" link at the bottom of your screen.';
mysql_close(); // Close the database connection.
include ('./includes/footer.html'); // Include the HTML footer.
exit();
} else { //If it did not run OK.
echo 'Your password could not be changed due to a system error. We apologize for any inconvenience.';
}
} else { // Failed the validation test.
echo '<p><font color="red"size="+1">Please try again.</font></p>';
}
mysql_close(); // Close the database connection.
} // End of the main Submit conditional.
?>
<p>Enter your email address below and your password will be reset.</p>
<form action="forgot_password.php" method="post">
<p><b>Email Address:</b> <input type="text"name="user_email" size="30" maxlength="40" value="<?php if (isset($_POST['user_email'])) echo $_POST['user_email']; ?>" /></p>
<div align="center"><input type="submit" name="submit" value="Reset My Password" /></div>
<input type="hidden" name="submitted" value="TRUE" />
</form>
<?php
include ('./includes/footer.html');
?>
При вводе пароля в БД старайтесь избегать алгоритма хеширования. SHA — это алгоритм хеширования, а не алгоритм шифрования. Пожалуйста, убедитесь, что ваше поле пароля в базе данных должно иметь большую длину. Я думаю, что ваш SHA () генерирует длинную строку. Если все работает нормально, измените заголовок вашей почты на ниже.
$header = "From: [email protected]\r\n";
$header.= "MIME-Version: 1.0\r\n";
$header.= "Content-Type: text/plain; charset=utf-8\r\n";
$header.= "X-Priority: 1\r\n";
и попробовать
mail($to,$from,$message,$header);
Других решений пока нет …