Почему отправка на почту произошла только один раз?
Все еще разбираюсь с отправкой почты и вот наткнулся на странность, отправка произошла успешно, но только один раз, при следующих попытках отправки формы, она проводилась успешно, но сообщения на почте нет.
Код серверной части на 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 и будет вам счастье
Форма вероятно аяксовая и отправляется через 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. Проверьте логи и записи о событиях отправки на почту. Возможно, в логах есть информация о том, почему отправка произошла только один раз. Может быть, была какая-то ошибка или проблема с отправкой.
2. Проверьте настройки почтового сервера. Возможно, есть ограничения на количество отправляемых писем за определенный период времени или на количество получателей. Также стоит убедиться, что почтовый сервер работает корректно и без сбоев.
3. Проверьте код, отвечающий за отправку писем. Возможно, в коде есть какая-то ошибка или ограничение, которое приводит к тому, что отправка происходит только один раз. Убедитесь, что код отправки писем написан корректно и не содержит ошибок.
Пример кода на PHP для отправки письма: