簡體   English   中英

密碼恢復未發送電子郵件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM