Как отправлять данные из формы на почту?
Доброго дня всем!
Столкнулся с проблемой, что ни в какую не отправляются данные из формы на почту
Пробовал и через 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
говорит о том, что вы не знаете что отвечает сервер.
Или знаете?
Сервер вероятней всего ответил текстом ошибки и отправил её с кодом 200, поэтому клиент думает, что response.ok.
Вам надо во вкладке Network посмотреть что именно ответил сервер.
интересно, что с яндексом не так..
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для отправки данных из формы на почту существует несколько способов, одним из самых популярных является использование серверного языка программирования, такого как PHP. Вот пример кода на PHP, который позволит вам отправить данные из формы на почту: