Не работает форма заявки

104
02 апреля 2022, 16:20

На сайте выдаёт ошибку,(Не удалось отправить Вашу заявку. Попробуйте еще раз). Много времени потратил разбираясь что к чему и не получается исправить. Помогите разобраться и как исправить. Тестовый домен ссылка

Было так.

define("__TO__", "info@remont-okon-berdsk.ru");
define('__SUCCESS_MESSAGE__', "Ваша заявка успешно отправлена. Мы ответим как можно скорее!");
define('__ERROR_MESSAGE__', "Не удалось отправить Вашу заявку. Попробуйте еще раз.");
define('__MESSAGE_EMPTY_FIELDS__', "Пожалуйста, заполните все поля");

//E-mail validation
function check_email($email){
    if(!@eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)){
        return false;
    } else {
        return true;
    }
}
//Send mail
function send_mail($to, $subject, $message, $headers){
    if(@mail($to, $subject, $message, $headers, __TO__)) {
        echo json_encode(array('status' => true, 'msg' => __SUCCESS_MESSAGE__));
    } else {
        echo json_encode(array('status' => false, 'msg' => __ERROR_MESSAGE__));
    }
}
//Get data form and send mail
if(isset($_POST['phone']) && isset($_POST['subject'])){
    $phone = htmlspecialchars($_POST['phone']);
    $subject = htmlspecialchars($_POST['subject']);
    $title = 'Сообщение от ';
    if (!empty($_POST['username'])) {
        $title .= htmlspecialchars($_POST['username']);
    }
    else {
        $title .= $phone;
    }
    if(empty($phone) || mb_strlen($phone) < 5) {
        echo json_encode(array('info' => 'error', 'msg' => "Введите корректный телефон."));
        exit();
    } else if(empty($subject)){
        echo json_encode(array('info' => 'error', 'msg' => "Ошибка отправки заявки."));
        exit();
    } else {
        $to = __TO__;
        $message = '
        <html>
        <head>
          <title>' .$title .'</title>
        </head>
        <body>
          <table style="width: 500px; font-family: arial; font-size: 14px;" border="1">
            <tr style="height: 32px;">
              <th align="right" style="width:150px; padding-right:5px;">Тема сообщения:</th>
              <td align="left" style="padding-left:5px; line-height: 20px;">'. $subject .'</td>
            </tr>
            <tr style="height: 32px;">
              <th align="right" style="width:150px; padding-right:5px;">Телефон:</th>
              <td align="left" style="padding-left:5px; line-height: 20px;">'. $phone .'</td>
            </tr>
          </table>
        </body>
        </html>
        ';
        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
        $headers .= 'From: ' .__TO__ ."\r\n";
        send_mail($to, $subject, $message, $headers);
    }
} else {
    echo json_encode(array('info' => 'error', 'msg' => __MESSAGE_EMPTY_FIELDS__));
}
?>

А стало так правильно?

    <?php
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
define("__TO__", "info@remont-okon-berdsk.ru");
define('__SUCCESS_MESSAGE__', "Ваша заявка успешно отправлена. Мы ответим как можно скорее!");
define('__ERROR_MESSAGE__', "Не удалось отправить Вашу заявку. Попробуйте еще раз.");
define('__MESSAGE_EMPTY_FIELDS__', "Пожалуйста, заполните все поля");

//E-mail validation
function check_email($email){
    if(!@eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)){
        return false;
    } else {
        return true;
    }
}
//Send mail
function send_mail($to, $subject, $message, $headers){
    if(@mail($to, $subject, $message, $headers, __TO__)) {
        echo json_encode(array('status' => true, 'msg' => __SUCCESS_MESSAGE__));
    } else {
        print_r(error_get_last());
        echo json_encode(array('status' => false, 'msg' => __ERROR_MESSAGE__));
    }
}
//Get data form and send mail
if(isset($_POST['phone']) && isset($_POST['subject'])){
    $phone = htmlspecialchars($_POST['phone']);
    $subject = htmlspecialchars($_POST['subject']);
    $title = 'Сообщение от ';
    if (!empty($_POST['username'])) {
        $title .= htmlspecialchars($_POST['username']);
    }
    else {
        $title .= $phone;
    }
    if(empty($phone) || mb_strlen($phone) < 5) {
        echo json_encode(array('info' => 'error', 'msg' => "Введите корректный телефон."));
        exit();
    } else if(empty($subject)){
        echo json_encode(array('info' => 'error', 'msg' => "Ошибка отправки заявки."));
        exit();
    } else {
        $to = __TO__;
        $message = '
        <html>
        <head>
          <title>' .$title .'</title>
        </head>
        <body>
          <table style="width: 500px; font-family: arial; font-size: 14px;" border="1">
            <tr style="height: 32px;">
              <th align="right" style="width:150px; padding-right:5px;">Тема сообщения:</th>
              <td align="left" style="padding-left:5px; line-height: 20px;">'. $subject .'</td>
            </tr>
            <tr style="height: 32px;">
              <th align="right" style="width:150px; padding-right:5px;">Телефон:</th>
              <td align="left" style="padding-left:5px; line-height: 20px;">'. $phone .'</td>
            </tr>
          </table>
        </body>
        </html>
        ';
        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $header = "Content-Type: text/plain; charset=utf-8\n";
        $header .= "From: Новая заявка <test@gmail.com>\n\n";
        $mail = mail("test@gmail.com", "test", "test", $header); // ale-valujskikh@yandex.ru
if($mail){
   echo 'OK';
} else {
   echo 'Ошибка с mail()';
} 

   }
 } else {
    echo json_encode(array('info' => 'error', 'msg' => __MESSAGE_EMPTY_FIELDS__));
}
?>
Answer 1

У вас в коде идет проверка mail() функции, которая при отправке возвращает false.

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

$header = "Content-Type: text/plain; charset=utf-8\n";
$header .= "From: Новая заявка <test@gmail.com>\n\n";
$mail = mail("test@gmail.com", "test", "test", $header); // сюда надо вписать свою почту
if($mail){
   echo 'OK';
} else {
   echo 'Ошибка с mail()';
} 

Если почта не доходит - используйте phpMailer и SMTP сервер. Бесплатные SMTP сервера для бизнеса у нас предоставляют яндекс и mail.ru

phpMailer: https://github.com/PHPMailer/PHPMailer

Если письмо приходит и mail() функция отрабатывает.

  1. Добавьте в начало вашего файла вывод всех ошибок:

    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    
  2. В вашем коде после отправки и проверки статуса добавьте:

    print_r(error_get_last())

Должно получиться вот так:

//Send mail
function send_mail($to, $subject, $message, $headers){
    if(@mail($to, $subject, $message, $headers, __TO__)) {
        echo json_encode(array('status' => true, 'msg' => __SUCCESS_MESSAGE__));
    } else {
        print_r(error_get_last());
        echo json_encode(array('status' => false, 'msg' => __ERROR_MESSAGE__));
    }
}

Это выведет вам все ошибки, какие есть в коде. Дальше сможете либо разобраться с ними самостоятельно, либо дополнить вопрос и получить консультацию тут.

READ ALSO
Сериализацация объектов в Json

Сериализацация объектов в Json

У меня есть базовый класс Base, и два класса которые его расширяют Fork,MessageТак же есть класс Page, в котором содержится массив (в котором будут храниться...

98
Много If-ов - нормально?

Много If-ов - нормально?

Написал порядка полусотни if-ов для проверки и присваивания существования значений переменным вида

86
Реализация покупки товара с сайта

Реализация покупки товара с сайта

Будьте добры подсказатьЯ хочу реализовать покупку товара с сайта,но не знаю как конкретно это делается

80
Функция array_rand() в PHP

Функция array_rand() в PHP

Всем приветРешил попробовать написать бота

113