Как отправлять данные из формы на почту?

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

Доброго дня всем!
Столкнулся с проблемой, что ни в какую не отправляются данные из формы на почту
Пробовал и через mail(), и через PHPMailer, просто не работает
Код html: (пробовал и через action внутри form, и через js)

<!DOCTYPE html> <html lang="en"> <head>   <meta charset="UTF-8">   <meta name="viewport" content="width=device-width, initial-scale=1.0">   <title>Document</title> </head> <body>   <form>     <input type="text" name="name" id="">     <input type="email" name="mail" id="">     <button type="submit">Press</button>   </form>    <script src="script.js"></script> </body> </html>

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <form> <input type="text" name="name" id=""> <input type="email" name="mail" id=""> <button type="submit">Press</button> </form> <script src="script.js"></script> </body> </html>

Код JS:

const form = document.querySelector('form');  form.addEventListener('submit', async (e) => {   e.preventDefault();    let data = new FormData(form);    let response = await fetch('server.php', {     method: 'post',     body: data   })    if (response.ok) {     console.log('good');        }   else {     console.log('Not good');   }    form.reset(); })

const form = document.querySelector('form'); form.addEventListener('submit', async (e) => { e.preventDefault(); let data = new FormData(form); let response = await fetch('server.php', { method: 'post', body: data }) if (response.ok) { console.log('good'); } else { console.log('Not good'); } form.reset(); })

Код PHP:

<?php   // mail()    $name = $_POST['name'];   $mail = $_POST['mail'];   $subject = "Заявка!";   $to = "mail@yandex.ru";    $msg="Имя: $namenПочта:$mail";   mail($to, $subject, $msg, 'Content-type: text/plain; charset=utf-8');    // PHPMailer    require 'phpmailer/PHPMailer.php';   require 'phpmailer/SMTP.php';   require 'phpmailer/Exception.php';    $mail = new PHPMailerPHPMailerPHPMailer();    try {     $mail->isSMTP();     $mail->CharSet = "UTF-8";     $mail->SMTPAuth = true;      $mail->Host = "smtp.gmail.com";     $mail->Username = "mail@gmail.com";     $mail->Password = "**********";     $mail->SMTPSecure = "ssl";     $mail->Port = 465;      $mail->setFrom('mail@gmail.com');     $mail->addAddress("newMail@gmail.com");      $mail->Subject = "Subject";     $mail->Body = "Hello!";     $mail->send();      $status = "Good";    } catch (Exception $e) {     $status = "Сообщение не было отправлено. Причина: {$mail->ErrorInfo}";   } ?>

<?php // mail() $name = $_POST['name']; $mail = $_POST['mail']; $subject = "Заявка!"; $to = "mail@yandex.ru"; $msg="Имя: $namenПочта:$mail"; mail($to, $subject, $msg, 'Content-type: text/plain; charset=utf-8'); // PHPMailer require 'phpmailer/PHPMailer.php'; require 'phpmailer/SMTP.php'; require 'phpmailer/Exception.php'; $mail = new PHPMailerPHPMailerPHPMailer(); try { $mail->isSMTP(); $mail->CharSet = "UTF-8"; $mail->SMTPAuth = true; $mail->Host = "smtp.gmail.com"; $mail->Username = "mail@gmail.com"; $mail->Password = "**********"; $mail->SMTPSecure = "ssl"; $mail->Port = 465; $mail->setFrom('mail@gmail.com'); $mail->addAddress("newMail@gmail.com"); $mail->Subject = "Subject"; $mail->Body = "Hello!"; $mail->send(); $status = "Good"; } catch (Exception $e) { $status = "Сообщение не было отправлено. Причина: {$mail->ErrorInfo}"; } ?>

Подскажите, пожалуйста, в чем причина может быть...
Почтовые сервисы разные использовал, yandex, gmail
Пароли тоже SMTP-шные, по крайней мере, у яндекса, у гугла не нашел, где можно поменять

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

на gmail нужно использовать пароль для приложения, получить его можно после включения двухфакторки

  • То, что вы пробовали это

    пробовал и через action внутри form, и через js

    говорит о том, что вы не знаете что отвечает сервер.
    Или знаете?

  • Роман Чубич, ну, не прям стопроцентно, из того, что понимаю, так это то, что через фетч получаем решенный или нет промис, но суть в том, что даже при true значении response.ok письмо просто никуда не доходит
  • Павел, да даже если получу, на яндекс пробовал с ключом для приложения, реакции никакой :( только если в самом яндексе проблема, получается
  • puppup, response.ok это не ответ сервера. Это мнение скрипта о том, ответил ли сервер.
    Сервер вероятней всего ответил текстом ошибки и отправил её с кодом 200, поэтому клиент думает, что response.ok.
    Вам надо во вкладке Network посмотреть что именно ответил сервер.
  • Роман Чубич, понял, попробую, спасибо
  • Роман Чубич, статус был 200, все параметры в порядке, вроде как, но попробовал через пароль для приложений именно через гугл и заработало все, в любом случае спасибо за помощь)
    интересно, что с яндексом не так..
  • Павел, через гугл все заработало, благодарю за совет)
  • Нужно решить такую задачу?

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

    Заказать помощь
    Лучший ответ
    1
    Алексей Денисов Ответ

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

    <?php
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];

    $to = 'your-email@example.com';
    $subject = 'Новое сообщение от ' . $name;
    $message_body = '

    Новое сообщение

    От: ' . $name . '

    Email: ' . $email . '

    Сообщение: ' . $message . '

    ';

    $headers = "MIME-Version: 1.0" . "\r

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

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

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

    комментарий

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

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