Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果邮件功能不工作,则显示错误_Php_Ajax_Email - Fatal编程技术网

Php 如果邮件功能不工作,则显示错误

Php 如果邮件功能不工作,则显示错误,php,ajax,email,Php,Ajax,Email,我正在构建一个电子邮件验证脚本,并且我正在使用ajax,因此每当用户填写错误或无效的电子邮件时,都会显示一个带有错误名称的错误栏,当该电子邮件为真且属于活动帐户时,会向用户发送一封带有说明的电子邮件,并且错误栏上会显示电子邮件已发送。 问题是,即使邮件功能不起作用,错误栏也会一直显示电子邮件已发送。 因此,我不想用一些行来检测电子邮件是否未发送,以在错误栏中显示“电子邮件未发送” 这是我的php文件: <?php include '../../app/init.php';

我正在构建一个电子邮件验证脚本,并且我正在使用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;
    }

?>
我只需要php文件上的一些行就可以将其作为ajax文件的响应返回

只需在if条件下使用mail(),并在if和else块中打印相应的消息。这将解决问题

if(mail($to, $title, $message, $headers)){
//success message
}
else{
//error message
}
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";
        }
    }

}

在第三个
if
语句中,
$email
来自哪里
if…else if…else if($email)
if(!$mail->send()){//echo“cannot send email”;}
@Anuga if条件中的第一个是每当smtp发送电子邮件失败时,最后一个总是在smtp配置为空时运行。好,您在做什么,让它在有用户时发送邮件。时期您需要在
mail()
上做一个
if()
语句,然后将该语句返回到调用
sendmail()
的位置,并在其上有一个
if()
语句或
$variable
以查看它是否通过。所以这条路可以缩短很多@Anuga如果(!send_mail($to,$from,$title,$message)){
没有,我指的是前面调用的
sendmail()
,而不是
send_mail()
。他的第一个代码段。它总是
sendmail()之后回显为真;
<?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";
        }
    }

}