[英]Password recovery not sending email
密碼恢復未發送電子郵件。 但它總是說已發送電子郵件。 請幫我。
<?php
session_start();
include_once 'dbconnect.php';
if (isset($_POST['submit'])) {
$email = $_POST['email'];
$query = mysql_query("SELECT * FROM users WHERE email='" . $email . "' ") or die(mysql_error());
$run = mysql_affected_rows();
$password = substr(hash('sha512', uniqid(rand(), 1)), 3, 10);
$pass = hash('sha512', $password);
if ($run != 0) {
$res = mysql_fetch_array($query);
$to = "$email";
$subject = "Obnovení hesla";
$body = "Dobrý den $res->username, vaše nové heslo je $password";
$additionalheader = "From: <admin@chat-web.com>";
mail($to, $subject, $body, $additionalheader);
if ($email) {
echo"<script>alert('Email byl úspěšně odeslán.')</script>";
} else {
echo"<script>alert('Emailová adresa $email neexistuje.')</script>";
}
}
$sql = mysql_query("UPDATE users SET password='$pass' WHERE email = '$email'")or die(mysql_error());
}
?>
郵件功能在您的服務器上正常工作嗎?
還要檢查您的垃圾郵件文件夾。
正如喬恩·斯特林(Jon Stirling)所說,更換
$ run = mysql_affected_rows();
與
$ run = mysql_num_rows($ query);
您使用錯誤的函數來檢查是否有返回的行。
mysql_affected_rows()返回受INSERT / UPDATE / DELETE
影響的行數。
mysql_num_rows()將返回查詢返回的行數,這實際上是您要檢查的內容。
為了正確檢查響應,請嘗試以下代碼:
if(mail($to, $subject, $body, $additionalheader)) {
echo "mail sent";
}
else {
echo "mail not sent";
}
您也可以打印$ res的響應以了解確切的錯誤。 另外,請閱讀以下文章。 如何測試PHP mail()是否已成功發送郵件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.