Почему не отправляется форма через phpMailer?

Ссылка скопирована
1 ответ

*разобрался, не тратьте время

Использовал fetch-запрос + phpMailer. Сам запрос уходит хорошо, статус 200, приходит тоже на мою почту. Но почему то саму инфу с полей формы не присылает(48стр в js), только то, что я записал непосредственно через formData.set(). Знаю только JS, с PHP вообще не знаком. Мне кажется что-то поменять надо в php-файле, но я опять же, не могу знать что. Буду благодарен, если подскажете, в чём дело

Почему не отправляется форма через phpMailer?

document.addEventListener('DOMContentLoaded', function () {      function validation() {}// возвращает true/false, делает валидацию полей             async function postSend(e) {          e.preventDefault()          let formData = new FormData(this)         formData.set('Имя разработчика:', 'Данила')          if (validation()) {              let response = await fetch('mailer.php', {                 method: 'POST',                 body: formData             })              if (response.ok) {                 formOverlay.classList.add('active-form')                 return await response.json()             } else {                 alert('Ошибка на сервере!')                 this.reset()             }          }      }      let formOverlay = document.querySelector('.form-done')     let allForms = document.querySelectorAll('form')     allForms.forEach((form) => {         form.addEventListener('submit', postSend)     })  })

document.addEventListener('DOMContentLoaded', function () { function validation() {}// возвращает true/false, делает валидацию полей async function postSend(e) { e.preventDefault() let formData = new FormData(this) formData.set('Имя разработчика:', 'Данила') if (validation()) { let response = await fetch('mailer.php', { method: 'POST', body: formData }) if (response.ok) { formOverlay.classList.add('active-form') return await response.json() } else { alert('Ошибка на сервере!') this.reset() } } } let formOverlay = document.querySelector('.form-done') let allForms = document.querySelectorAll('form') allForms.forEach((form) => { form.addEventListener('submit', postSend) }) })

<?php // Файлы phpmailer require 'phpMailer/PHPMailer.php'; require 'phpMailer/SMTP.php'; require 'phpMailer/Exception.php';  $title = "Тема письма"; $file = $_FILES['file'];  $c = true; // Формирование самого письма $title = "Заголовок письма"; foreach ( $_POST as $key => $value ) {   if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {     $body .= "     " . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "       <td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>       <td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>     </tr>     ";   } }  $body = "<table style='width: 100%;'>$body</table>";  // Настройки PHPMailer $mail = new PHPMailerPHPMailerPHPMailer();  try {   $mail->isSMTP();   $mail->CharSet = "UTF-8";   $mail->SMTPAuth   = true;    // Настройки вашей почты   $mail->Host       = 'smtp.gmail.com'; // SMTP сервера вашей почты   $mail->Username   = 'idemvpered76@gmail.com'; // Логин на почте   $mail->Password   = 'работающийпароль(скрыл)'; // Пароль на почте   $mail->SMTPSecure = 'ssl';   $mail->Port       = 465;    $mail->setFrom('Заявка с вашего сайта'); // Адрес самой почты и имя отправителя    // Получатель письма   $mail->addAddress('idemvpered76@gmail.com');    // Отправка сообщения   $mail->isHTML(true);   $mail->Subject = $title;   $mail->Body = $body;    $mail->send();  } catch (Exception $e) {   $status = "Сообщение не было отправлено. Причина ошибки: {$mail->ErrorInfo}"; }

<?php // Файлы phpmailer require 'phpMailer/PHPMailer.php'; require 'phpMailer/SMTP.php'; require 'phpMailer/Exception.php'; $title = "Тема письма"; $file = $_FILES['file']; $c = true; // Формирование самого письма $title = "Заголовок письма"; foreach ( $_POST as $key => $value ) { if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) { $body .= " " . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . " <td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td> <td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td> </tr> "; } } $body = "<table style='width: 100%;'>$body</table>"; // Настройки PHPMailer $mail = new PHPMailerPHPMailerPHPMailer(); try { $mail->isSMTP(); $mail->CharSet = "UTF-8"; $mail->SMTPAuth = true; // Настройки вашей почты $mail->Host = 'smtp.gmail.com'; // SMTP сервера вашей почты $mail->Username = 'idemvpered76@gmail.com'; // Логин на почте $mail->Password = 'работающийпароль(скрыл)'; // Пароль на почте $mail->SMTPSecure = 'ssl'; $mail->Port = 465; $mail->setFrom('Заявка с вашего сайта'); // Адрес самой почты и имя отправителя // Получатель письма $mail->addAddress('idemvpered76@gmail.com'); // Отправка сообщения $mail->isHTML(true); $mail->Subject = $title; $mail->Body = $body; $mail->send(); } catch (Exception $e) { $status = "Сообщение не было отправлено. Причина ошибки: {$mail->ErrorInfo}"; }

Почему не отправляется форма через phpMailer?

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

По умолчанию PHPMail не выбрасывает исключение. Он просто возвращает статус true/false.
Для работы с исключениями необходимо явно указать режим при создании экземпляра.

- $mail = new PHPMailerPHPMailerPHPMailer(); + $mail = new PHPMailerPHPMailerPHPMailer(true);

- $mail = new PHPMailerPHPMailerPHPMailer(); + $mail = new PHPMailerPHPMailerPHPMailer(true);

  • Rsa97, проверю, спасибо
  • Rsa97, хм, ну я просто добавил true, но теперь вообще ничего не приходит:(
    запрос уходит за 0.022с, хотя раньше уходил за >1.5с

    Почему не отправляется форма через phpMailer?

    Почему не отправляется форма через phpMailer?

  • Danila232, А что должно приходить по ошибке? У вас $status устанавливается, но никакого вывода для него не видно. И в JS-коде нет никакой обработки сообщений при ответе 200.
  • Rsa97, в общем если убрать "true", то отправка идёт, если добавить, то нет. Но т.к я не знаю php, то и не знаю что тут за что отвечает
  • Очевидно, что код отправки письма работает, раз уж письмо приходит на почту =)

    Вы смотрели какой запрос уходит из браузера? DevTools - Сеть - Нужный запрос - Полезная нагрузка. Там должны быть все передаваемые данные.

  • вместо formData.set .append
  • Ответы:

    Вы уверены, что в let formData = new FormData(this) this указывает именно на форму? Я бы заменил на e.target.

    • Да по идее this на форму указывает. This в функции, которая вызвана в слушателе событий относится к элементу, на который повесили слушатель

      То есть там перебор всех форм через forEach, и на каждую форму при submit
      - вызываем функцию postSend. Так что this в этой функции = form

      Вроде так?

    • Да и this.reset() работает
      Так что да, this в данном случае = form
    Нужно решить такую задачу?

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

    Заказать помощь
    Лучший ответ
    1
    Мария Код Ответ

    Прежде всего, если у вас возникают проблемы с отправкой формы через PHPMailer, важно проверить несколько ключевых моментов:

    1. Проверьте настройки SMTP: убедитесь, что вы правильно сконфигурировали свой SMTP сервер, включая адрес сервера, порт, учетные данные (логин и пароль) и тип шифрования (например, SSL или TLS).

    2. Проверьте, не блокирует ли ваш хостинг провайдер исходящий SMTP трафик: некоторые хостинг провайдеры могут блокировать исходящий SMTP трафик для предотвращения спама. Убедитесь, что ваш хостинг провайдер разрешает исходящий SMTP трафик.

    3. Убедитесь, что вы правильно настроили ваш PHPMailer объект: убедитесь, что вы правильно указали адрес отправителя, адрес получателя, тему письма и тело письма. Также убедитесь, что вы вызвали метод `send()` для отправки письма.

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

    Вот пример кода на PHP, который использует PHPMailer для отправки письма:

    isSMTP();
        $mail->Host = 'smtp.example.com';
        $mail->SMTPAuth = true;
        $mail->Username = 'your@example.com';
        $mail->Password = 'your_password';
        $mail->SMTPSecure = 'tls';
        $mail->Port = 587;
     
        $mail->setFrom('from@example.com', 'Your Name');
        $mail->addAddress('recipient@example.com', 'Recipient Name');
     
        $mail->isHTML(true);
        $mail->Subject = 'Subject';
        $mail->Body    = 'This is the HTML message body';
     
        $mail->send();
        echo 'Message has been sent';
    } catch (Exception $e) {
        echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
    }
    ?>

    isSMTP(); $mail->Host = 'smtp.example.com'; $mail->SMTPAuth = true; $mail->Username = 'your@example.com'; $mail->Password = 'your_password'; $mail->SMTPSecure = 'tls'; $mail->Port = 587; $mail->setFrom('from@example.com', 'Your Name'); $mail->addAddress('recipient@example.com', 'Recipient Name'); $mail->isHTML(true); $mail->Subject = 'Subject'; $mail->Body = 'This is the HTML message body'; $mail->send(); echo 'Message has been sent'; } catch (Exception $e) { echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo; } ?>

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

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

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

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

    комментарий

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

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