ошибка отображения, если функция почты не работает - PullRequest
0 голосов
/ 29 мая 2019

Я создаю сценарий проверки электронной почты и использую ajax, поэтому всякий раз, когда пользователь вводит ложное или недействительное электронное письмо, будет отображаться панель ошибок с именем ошибки, а когда электронное письмо истинно и принадлежитактивная учетная запись, пользователю будет отправлено электронное письмо с инструкциями, а в строке ошибок указано, что электронное письмо отправлено.Проблема в том, что даже функция почты не работает, в строке ошибок постоянно говорится, что письмо отправлено.Поэтому я не хочу, чтобы несколько строк определяли, было ли отправлено письмо, чтобы показать «письмо не было отправлено» в строке ошибок.

Это мой php-файл:

    <?php 

include '../../app/init.php';

        /* Clean email */
    $recover_email = $_POST['recover_email'];

       /* check if email is valid */
    if(!filter_var($recover_email, FILTER_VALIDATE_EMAIL)) {

        /* email not valid */
        echo 3;

        /* Check if email exist */
    } else if(Database::exists('user_id', 'users', ['email' => $recover_email])) {


        /* Define some variables */
        $user_id            = Database::simple_get('user_id', 'users', ['email' => $recover_email]);
        $lost_password_code = md5($recover_email + microtime());

        /* Update the current activation email */
        $database->query("UPDATE `users` SET `lost_password_code` = '{$lost_password_code}' WHERE `user_id` = {$user_id}");

        /* Send the email */
        sendmail($recover_email,  $settings->contact_email, $language->lost_password->email->title, sprintf($language->lost_password->email->content, $settings->url, $recover_email, $lost_password_code));

        /* email exist */
        echo true; 

    } else if(!Database::exists('user_id', 'users', ['email' => $email])) {

        /* email not exist */
        echo false;
    }

?>

Это мои почтовые функции:

function send_mail($to, $from, $title, $message) {

    $headers = "From: " . strip_tags($from) . "\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

    mail($to, $title, $message, $headers);
}

function sendmail($to, $from, $title, $message) {
    global $settings;

    if(!empty($settings->smtp_host) && !empty($settings->smtp_port) && !empty($settings->smtp_user) && !empty($settings->smtp_pass)) {

        $mail = new PHPMailer;
        $mail->isSMTP();
        $mail->SMTPDebug = 0;
        $mail->SMTPSecure = 'tls';
        $mail->SMTPAuth = true;
        $mail->isHTML(true);

        $mail->Host = gethostbyname('tls://'.$settings->smtp_host);
        $mail->Port = $settings->smtp_port;
        $mail->Username = $settings->smtp_user;
        $mail->Password = $settings->smtp_pass;

        $mail->setFrom($from, $settings->title);
        $mail->addReplyTo($from, $settings->title);
        $mail->addAddress($to);
        $mail->Subject = $title;
        $mail->Body = $message;

        if (!$mail->send()) {
            send_mail($to, $from, $title, $message);
        }

    } else {
        send_mail($to, $from, $title, $message);
    }

}

Мне нужно только несколько строк в файле php, чтобы вернуть его в ответ на файл ajax

Ответы [ 2 ]

1 голос
/ 29 мая 2019

mail() Возвращает TRUE, если почта была успешно принята для доставки, FALSE в противном случае. Поэтому вам нужно запустить оператор if, чтобы проверить, было ли письмо принято для доставки.

<?php

function send_mail($to, $from, $title, $message)
{

    $headers = "From: " . strip_tags($from) . "\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

    if (mail($to, $title, $message, $headers)) {

        return true;
    } else {

        return false;
    }
}

function sendmail($to, $from, $title, $message)
{
    global $settings;

    if (!empty($settings->smtp_host) && !empty($settings->smtp_port) && !empty($settings->smtp_user) && !empty($settings->smtp_pass)) {

        $mail = new PHPMailer;
        $mail->isSMTP();
        $mail->SMTPDebug  = 0;
        $mail->SMTPSecure = 'tls';
        $mail->SMTPAuth   = true;
        $mail->isHTML(true);

        $mail->Host     = gethostbyname('tls://' . $settings->smtp_host);
        $mail->Port     = $settings->smtp_port;
        $mail->Username = $settings->smtp_user;
        $mail->Password = $settings->smtp_pass;

        $mail->setFrom($from, $settings->title);
        $mail->addReplyTo($from, $settings->title);
        $mail->addAddress($to);
        $mail->Subject = $title;
        $mail->Body    = $message;

        if (!$mail->send()) {
            if (!send_mail($to, $from, $title, $message)) {

                echo "Error sending email, please try again later";
            }
        }

    } else {
        if (!send_mail($to, $from, $title, $message)) {

            echo "Error sending email, please try again later";
        }
    }

}
0 голосов
/ 29 мая 2019

просто используйте mail () в условии if и напечатайте соответствующее сообщение в блоке if и else.это решит проблему

if(mail($to, $title, $message, $headers)){
//success message
}
else{
//error message
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...