Почему отправка на почту произошла только один раз?

Ссылка скопирована
PHP
29 апреля 2026 1 ответ

Все еще разбираюсь с отправкой почты и вот наткнулся на странность, отправка произошла успешно, но только один раз, при следующих попытках отправки формы, она проводилась успешно, но сообщения на почте нет.

Код серверной части на php:

<?php     use PHPMailerPHPMailerPHPMailer;     use PHPMailerPHPMailerException;     use PHPMailerPHPMailerSMTP;      require 'phpmailer/src/Exception.php';     require 'phpmailer/src/PHPMailer.php';     require 'phpmailer/src/SMTP.php';        $mail = new PHPMailer(true);     $mail->CharSet = 'UTF-8';     $mail->setLanguage('ru', 'phpmailer/language/');     $mail->IsHTML(true);      //ОТ кого письмо      $mail->setFrom('mailer2024@mail.ru', 'MAILER');     //Кому отправить     $mail->addAddress('****@bk.ru');     //Тема письма      $mail->Subject = 'Здравствуйте. У вас новая Заявка на сайте';      //Тело Пиьсма     $body = '<h1>Посетитель оставил заявку</h1>';      if(trim(!empty($_POST['name']))) {         $body.='<p><strong>Имя:</strong> '.$_POST['name'].'</p>';     }     if(trim(!empty($_POST['phone']))) {         $body.='<p><strong>Телефон:</strong> '.$_POST['phone'].'</p>';     }      //Отправялем      $mail->Body = $body;      if (!$mail->send()) {         $message = 'Ошибка';     }     else {         $message = "Данные отправлены!";     }      $response = ['message' => $message];      header('Content-Type: application/json');     echo json_encode($response);  ?>

<?php use PHPMailerPHPMailerPHPMailer; use PHPMailerPHPMailerException; use PHPMailerPHPMailerSMTP; require 'phpmailer/src/Exception.php'; require 'phpmailer/src/PHPMailer.php'; require 'phpmailer/src/SMTP.php'; $mail = new PHPMailer(true); $mail->CharSet = 'UTF-8'; $mail->setLanguage('ru', 'phpmailer/language/'); $mail->IsHTML(true); //ОТ кого письмо $mail->setFrom('mailer2024@mail.ru', 'MAILER'); //Кому отправить $mail->addAddress('****@bk.ru'); //Тема письма $mail->Subject = 'Здравствуйте. У вас новая Заявка на сайте'; //Тело Пиьсма $body = '<h1>Посетитель оставил заявку</h1>'; if(trim(!empty($_POST['name']))) { $body.='<p><strong>Имя:</strong> '.$_POST['name'].'</p>'; } if(trim(!empty($_POST['phone']))) { $body.='<p><strong>Телефон:</strong> '.$_POST['phone'].'</p>'; } //Отправялем $mail->Body = $body; if (!$mail->send()) { $message = 'Ошибка'; } else { $message = "Данные отправлены!"; } $response = ['message' => $message]; header('Content-Type: application/json'); echo json_encode($response); ?>

Подскажите пожалуйста, где я налажал.

Дополнительно:

отправляйте через smtp и будет вам счастье

  • ну и всякие mx, dkim и spf у вас прописаны и прописаны верно?
  • Владислав Лысков, Так и сделал) Спасибо большое
  • Форма вероятно аяксовая и отправляется через js один раз.
    Для отладки убедитесь, что до скрипта что-то доходит второй раз, выведите в нём
    print_r($_POST);
    Если ничего не доходит, то копайте клиентские скрипты, которые отправляют данные в форму.
    Или еще вариант, что письма попадают в спам, в почте проверьте папку спам.

    • По сути после обновления скрипт должен сработать еще раз, верно? Но почему-то ничего такого нет
    • Melk0or, не понял из ответа, что вы обновляете.
      В скрипт php который отправляет почту добавьте вывод print_r($_POST);
      Если данные $_POST в скрипт не приходят, то значит на стороне клиента не отправляются.
      Нужно отлаживать, выявлять место в коде где проблема.
      Сначала смотрите, в php данные отправились? Если не отправились, смотрите реализацию формы, скрипт js, его тоже отлаживайте постепенно.
      На событие отправки формы поставьте вывод в консоль console.log('форма отправилась')
      Перед отправкой данных сделайте их вывод с помощью alert или console.log
    • koder_1, После обновления страницы через ctrl+F5 0имел ввиду . У меня есть вывод в консоль , при каждом действии, и когда я вставляю в код серверной части print_r($_POST) - выводит в консоль ошибку

      Почему отправка на почту произошла только один раз?

      А сам код скрипта выглядит так:

      "use strict"  document.addEventListener('DOMContentLoaded', function () {     const form = document.getElementById('form');     form.addEventListener('submit', formSend);      async function formSend(e) {         e.preventDefault();         console.log('1');         let formData = new FormData(form);         form.classList.add('_sending')         try {             let response = await fetch('sendmail.php', {                 method: 'POST',                 body: formData             });             console.log('2');             if (response.ok) {                 let  result= await response.json();                 console.log('3');                 alert(result.message + "?");                 // formPreview.innerHTML = '';                 form.reset();             }             else {                 alert('Ошибка');             }         }         catch(error) {             console.log('Произошла ошибка отправки fetch', error);             alert('Ошибка в выполнении запроса');         }     } })

      "use strict" document.addEventListener('DOMContentLoaded', function () { const form = document.getElementById('form'); form.addEventListener('submit', formSend); async function formSend(e) { e.preventDefault(); console.log('1'); let formData = new FormData(form); form.classList.add('_sending') try { let response = await fetch('sendmail.php', { method: 'POST', body: formData }); console.log('2'); if (response.ok) { let result= await response.json(); console.log('3'); alert(result.message + "?"); // formPreview.innerHTML = ''; form.reset(); } else { alert('Ошибка'); } } catch(error) { console.log('Произошла ошибка отправки fetch', error); alert('Ошибка в выполнении запроса'); } } })

    • Естественно в консоль выводит ошибку)
      Вы отладку делали когда-нибудь?
      ob_start(); print_r($_POST); $test_text=ob_get_contents(); ob_end_clean(); $h = fopen(__DIR__.'/1.txt', 'ab'); fwrite($h, $test_text); fclose($h);

      ob_start(); print_r($_POST); $test_text=ob_get_contents(); ob_end_clean(); $h = fopen(__DIR__.'/1.txt', 'ab'); fwrite($h, $test_text); fclose($h);

      И будет писаться в файл 1.txt массив POST

    • Спасибо большое, массив выводит, иначе выдало бы ошибку, но вот куда отправляется, раз до почтового ящика не доходит. Сделал через smtp и все все приходит хорошо. Не могу понять где ошибка . Еще раз спасибо!
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Сергей Миронов Ответ

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

    1. Проверьте логи и записи о событиях отправки на почту. Возможно, в логах есть информация о том, почему отправка произошла только один раз. Может быть, была какая-то ошибка или проблема с отправкой.

    2. Проверьте настройки почтового сервера. Возможно, есть ограничения на количество отправляемых писем за определенный период времени или на количество получателей. Также стоит убедиться, что почтовый сервер работает корректно и без сбоев.

    3. Проверьте код, отвечающий за отправку писем. Возможно, в коде есть какая-то ошибка или ограничение, которое приводит к тому, что отправка происходит только один раз. Убедитесь, что код отправки писем написан корректно и не содержит ошибок.

    Пример кода на PHP для отправки письма:

    <?php
    $to = "recipient@example.com";
    $subject = "Тема письма";
    $message = "Текст письма";

    $headers = "From: sender@example.com\r

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно