Забыли пароль при отправке почты в php - PullRequest
0 голосов
/ 01 октября 2019

Это мой забытый пароль. Он прекрасно работает, когда я его проверял. он добавляет новый пароль в базу данных. но это не отправка нового пароля по почте пользователю

Может кто-нибудь помочь мне с этой проблемой? это будет очень полезно.

</p>

<pre><code><?php
   function generateRandomString($length = 15) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

include 'config.php';

$check=mysqli_num_rows(mysqli_query($conn,"SELECT * FROM users WHERE email='".$_POST['email']."'"));

        if($check==1)
        {
            $users=mysqli_fetch_assoc(mysqli_query($conn,"SELECT * FROM users WHERE email='".$_POST['email']."'"));
            $code=generateRandomString();
            $msg='Hy, '.$users['name'].' Your New Generated Password is: '.$code.'';
            $headers = "[Reset Password]";
            $mml($_POST['email'],'Reset Password',$msg,$headers);

            if($mml){
mysqli_query($conn,"UPDATE users SET password='".md5($code)."' where email='".$_POST['email']."'");

            echo '<div class="alert alert-success">
                      <strong>New Password Has Been Sent to Your Mail!</strong> Check Your Inbox.
                    </div>';} else {
echo '<div class="alert alert-warning">
                      <strong>Timeout, Try again later!</strong>.
                    </div>';
}

        } else {
                echo '<div class="alert alert-danger">
                              <strong>User not found!</strong>.
                            </div>';
        }
?>
</code>

1 Ответ

0 голосов
/ 01 октября 2019

Хорошо, у вас есть ряд проблем. Поскольку комментарии предполагают, что вы в настоящее время вообще не вызываете функцию mail ().

Функция mail () принимает несколько аргументов и может иметь ряд проблем с доставкой почты, если она неправильно построена.

Эта строка:

 $mml($_POST['email'],'Reset Password',$msg,$headers);

Должна быть:

 $mnl = mail($_POST['email'],'Reset Password',$msg,$headers);

Это будет означать, что вы получите логическое значение true / false, если функция FUNCTION будет выполнена успешно. (Это не обязательно означает, что ваша почта попадет туда, куда она должна идти ...) Чтобы убедиться, что ваша почта действительно получит то, для чего она предназначена, вам нужно убедиться, что все ваши заголовки построены правильно и в дополнение к этомучто ваши DNS-записи настроены правильно (DKIM, SPF и т. д.)

Рассмотрим следующий фрагмент кода:

    $hostname       = "yourhostname.org";
    $date           = date('r', time());
    $nameto         = "Mr. Target";
    $recipient      = "target@targetdomain.com";
    $from           = "origin_address@yourdomain.net";
    $namefrom       = "Mr. Sender";
    $subject        = "Password Reset Thingy";

    $headers = [];
    $headers[] = "MIME-Version: 1.0";
    //  $headers[] = "Content-type: text/plain; charset=iso-8859-1";
    $headers[] = "Content-type: text/html; charset=utf-8";
    $headers[] = "From: $namefrom <$from>";
    $headers[] = "Sender: $namefrom <$from>";
    //  $headers[] = "Bcc: Some Other Dude <me@mydomain.net>";
    $headers[] = "Reply-To: $namefrom <$from>";
    $headers[] = "To: $nameto <$recipient>";
    $headers[] = "Subject: $subject";
    $headers[] = "Message-ID: <". sha1(microtime(true)) ."@$hostname>"; //This is essential for getting to Gmail addresses.... 
    $headers[] = "X-Mailer: PHP/".phpversion();
    $headers[] = "Date: $date";
    $headers = implode("\r\n", $headers);

    $mnl = mail($recipient,$subject,$body,$headers,"-f $from") ;

Поэтому важно включить ключ -f в функцию mail (чтобы заставитьотправлять), заголовки также должны быть составлены как можно более подробно, чтобы избежать попадания в них спам-фильтров. Вы должны будете в свое время прочитать о правильном построении заголовка, что выходит за рамки того, что я хочу здесь напечатать.

Функция mail в PHP в общем-то привередлива, однако вы можете посмотреть на использование PHPMailer каккласс, который делает многие вещи намного проще.

Или вы можете посмотреть на использование сокетов или чего-то еще и написать свою собственную функцию для отправки его с использованием SMTP, что я иногда делаю, следующая функция - это то, что яобычно используйте, если чипы не работают и даст вам хотя бы отправную точку для работы с ....

<code>    function authSendEmail($from, $namefrom, $to, $nameto, $subject, $headers, $message) {


$smtpServer = "mail.yourhostname.com";
$port = "25"; //Or whatever the default port on your server is
$timeout = "30";
$username = "origin@yourdomain.com";
$password = "myemailpassword";
$localhost = "yourhostname.com";
$newLine = "\r\n";
$date = date('r', time()); 


    //Connect to the host on the specified port
$smtpConnect = fsockopen($smtpServer, $port, $errno, $errstr, $timeout);
$smtpResponse = fgets($smtpConnect, 515);
if(empty($smtpConnect)) {
    $output = "Failed to connect: $smtpResponse";
    return $output;
} else {
    $logArray['connection'] = "Connected: $smtpResponse";
}

   //Request Auth Login
fputs($smtpConnect,"AUTH LOGIN" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['authrequest'] = "$smtpResponse";

    //Send username
fputs($smtpConnect, base64_encode($username) . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['authusername'] = "$smtpResponse";

    //Send password
fputs($smtpConnect, base64_encode($password) . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['authpassword'] = "$smtpResponse";

    //Say Hello to SMTP
fputs($smtpConnect, "HELO $localhost" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['heloresponse'] = "$smtpResponse";

    //Email From
fputs($smtpConnect, "MAIL FROM: $from" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['mailfromresponse'] = "$smtpResponse";

    //Email To
fputs($smtpConnect, "RCPT TO: $to" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['mailtoresponse'] = "$smtpResponse";

    //The Email
fputs($smtpConnect, "DATA" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['data1response'] = "$smtpResponse";

fputs($smtpConnect, "To: $to\nFrom: $from\nSubject: $subject\n$headers\n\n$message\n.\n");
$smtpResponse = fgets($smtpConnect, 515);
$logArray['data2response'] = "$smtpResponse";

     // Say Bye to SMTP
fputs($smtpConnect,"QUIT" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['quitresponse'] = "$smtpResponse";

//Show log
//  echo "<pre>$to<br/>";
//  print_r ($logArray);
//  echo "
"; $ output = $ logArray; вернуть $ output;}

И тогда вы можете назвать это так:

$result=authSendEmail($from,$fname,$to,$nameto,$subject,$headers,$message) ; //Use SMTP
var_dump($result);

Надеюсь, это каким-то образом поможет вам в той или иной форме!

...