Как сделать отправку формы на почту php
Нашей условной задачей будет отправка формы заказа обратного звонка на почту. Поля ввода вы можете использовать любые, главное чтобы отличались атрибуты name и id в теге input:
Создаем html форму для отправки предположим в файле index.html
Создаем обработчик формы — файл send.php. Чтобы было легко сориентироваться в скрипте, оставляю ключевые комментарии у нужных строк.
if (isset($_POST['phone'])) /* Сюда впишите свою эл. почту */ $myaddres = "email@yandex .ru"; // кому отправляем /* А здесь прописывается текст сообщения, \n - перенос строки */ $mes = "Тема: Заказ обратного звонка!\nТелефон: $phone\nИмя: $name"; /* А эта функция как раз занимается отправкой письма на указанный вами email */ $sub='Заказ'; //сабж $email='Заказ обратного звонка'; // от кого $send = mail ($myaddres,$sub,$mes,"Content-type:text/plain; charset = utf-8\r\nFrom:$email"); ini_set('short_open_tag', 'On'); header('Refresh: 3; URL=index.html'); ?> Спасибо! Мы свяжемся с вами! Спасибо! Мы свяжемся с вами!
Всё готово. Скрипт 100% работает. Если письма не доходят, проверьте правильность ввода адреса почты и посмотрите логи на вашем хостинге.
Как отправить форму на почту?
У меня есть 5 инпутов. После их заполнения и нажатии кнопки «отправить» данные этих форм должны приходить на почту. Тема должна быть фиксированной. Email в коде также должен быть фиксированный, на который собственно должно приходить письмо. Как это можно реализовать? Можно ли пример кода?
- Вопрос задан более трёх лет назад
- 63387 просмотров
Комментировать
Решения вопроса 1

Допустим, твоя форма:
Форма обратной связи Ваше имя: Email для связи: Ваше сообщение:
Тогда создавай php с таким содержанием:
@example.com' . ', '; // обратите внимание на запятую $to .= 'wez@example.com'; // тема письма $subject = 'Письмо с моего сайта'; // текст письма $message = 'Пользователь' . $_POST['name'] . ' отправил вам письмо:
' . $_POST['message'] . '
Связяться с ним можно по email ' . $_POST['email'] . '' ; // Для отправки HTML-письма должен быть установлен заголовок Content-type $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; // Дополнительные заголовки $headers .= 'To: Иван ' . "\r\n"; // Свое имя и email $headers .= 'From: ' . $_POST['name'] . '' . "\r\n"; // Отправляем mail($to, $subject, $message, $headers); ?>
Правки для realt:
Допустим, твоя форма:
Форма обратной связи Инпут 1: Инпут 2: Инпут 3: Инпут 4: Инпут 5:
Тогда создавай php с таким содержанием:
@example.com' . ', '; // обратите внимание на запятую $to .= 'wez@example.com'; // тема письма $subject = 'Письмо с моего сайта'; // текст письма меняется он!! $message = $_POST['input1'] . '
' . $_POST['input1'] . '
' . $_POST['input1'] . '
' . $_POST['input1']; // Для отправки HTML-письма должен быть установлен заголовок Content-type $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; // Дополнительные заголовки $headers .= 'To: Иван ' . "\r\n"; // Свое имя и email $headers .= 'From: ' . $_POST['name'] . '' . "\r\n"; // Отправляем mail($to, $subject, $message, $headers); ?>
Как настроить отправку формы обратной связи на электронную почту
Узнайте, как настроить отправку формы обратной связи на электронную почту с помощью PHP и SMTP, шаг за шагом!

Алексей Кодов
Автор статьи
23 июня 2023 в 15:19
В современном мире сайты используют формы обратной связи для того, чтобы пользователи могли легко связаться с администрацией сайта или отправить свои вопросы и предложения. В данной статье мы рассмотрим, как настроить отправку формы обратной связи на электронную почту с помощью PHP и SMTP.
Шаг 1: Создание HTML-формы
Для начала нам потребуется создать простую HTML-форму, которую пользователь будет заполнять на вашем сайте. Вот пример такой формы:
Форма обратной связи
Веб-разработчик: новая работа через 9 месяцев
Получится, даже если у вас нет опыта в IT

Шаг 2: Настройка PHP-скрипта для отправки писем
Теперь, когда у нас есть форма, нам нужно создать PHP-скрипт, который будет обрабатывать данные формы и отправлять их на указанную электронную почту. Создайте файл sendmail.php и добавьте следующий код:
<?php require 'PHPMailerAutoload.php'; $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $mail = new PHPMailer; $mail->isSMTP(); $mail->Host = 'smtp.example.com'; $mail->SMTPAuth = true; $mail->Username = 'your_email@example.com'; $mail->Password = 'your_email_password'; $mail->SMTPSecure = 'tls'; $mail->Port = 587; $mail->setFrom($email, $name); $mail->addAddress('your_email@example.com'); $mail->isHTML(true); $mail->Subject = 'Сообщение с формы обратной связи'; $mail->Body = "От: $name <br> Email: $email <br> Сообщение: $message"; if(!$mail->send()) < echo 'Ошибка при отправке сообщения.'; echo 'Mailer Error: ' . $mail->ErrorInfo; >else < echo 'Сообщение успешно отправлено!'; >?>
В этом примере мы используем библиотеку PHPMailer для отправки писем через SMTP. Убедитесь, что вы указали правильные данные для вашего SMTP-сервера, логина и пароля электронной почты.
Веб-разработчик: новая работа через 9 месяцев
Получится, даже если у вас нет опыта в IT

Шаг 3: Тестирование
Теперь, когда у нас есть форма обратной связи и PHP-скрипт для отправки писем, можно протестировать работу нашей системы. Заполните форму на вашем сайте и проверьте, пришло ли письмо на указанную почту.
Если все настроено правильно, вы должны получить письмо с данными, указанными в форме обратной связи. В случае возникновения ошибок проверьте правильность настроек SMTP и прочитайте документацию PHPMailer для устранения проблем.
Теперь ваша форма обратной связи готова к использованию! Не забудьте улучшить ее внешний вид с помощью CSS и добавить проверку введенных данных на стороне клиента для улучшения пользовательского опыта.
Простейшая форма отправки данных на почту при помощи HTML и PHP
Одной из самых востребованных функций на сайте является форма заявки или заказа, данные из которой отправляются на почту владельцу сайта. Как правило такие формы являются простыми и состоят из двух трех полей для ввода данных. Как же создать такую форму заказа? Здесь потребуется использование языка разметки HTML и языка программирования PHP.
Язык разметки HTML сам по себе несложен, нужно всего лишь разобраться в том как и где ставить те или иные теги. С языком программирования PHP все немного сложнее.
Для программиста создать такую форму не составит труда, а вот HTML верстальщику может показаться сложным некоторые действия.
Создаем форму отправки данных в html
На этом этапе нужно создать файл form.php, в него добавить html код формы. Подробности о каждом элементе формы читайте в статье Как сделать форму в HTML для сайта.
Первая строка будет следующей
Это очень важный элемент формы. В нем мы указываем каким способом будут передаваться данные и какому файлу. В данном случае все передачется методом POST файлу send.php. Программа в этом файле соответственно должна принять данные, они будут содержаться в post массиве, и отправить их на указанный email адрес.
Вернемся к форме. Вторая строка будет содержать поле для ввода ФИО. Имеет следующий код:
Тип формы text, то есть пользователь сможет ввести или скопировать сюда текст с клавиатуры. Под параметром name содержится название формы. В данном случае это fio, именно под таким именем будет передаваться все, что пользователь введен в данноу поле. Параметр placeholder указывает на то, что будет записано в этом поле в виде пояснения.
Здесь практически все то же самое, но имя для поля указано email, а пояснении указано, чтобы пользователь в эту форму ввел свой адресс электронной почты.
Следующей строкой будет кнопка «отправить»:
И последней строкой в форме будет тэг
Теперь соберем все вместе.
Теперь сделаем так, чтобы поля в форме стали обязательными для заполнения. Имеем следующий код:
Создаем файл, принимающий данные из HTML формы
Это будет файл с именем send.php
В файле на первом этапе нужно принять данные из пост массива. Для этого создаем две переменные:
$fio = $_POST[‘fio’];
$email = $_POST[’email’];
Перед названиями переменных в php ставится знак $, в конце каждой строки ставиться точка с запятой. $_POST это массив в который передаются данный из формы. В форме html при этом указан метод отправки method=»post». Так, приняты две переменные из формы html. Для целей защиты своего сайта нужно провести эти переменные через несколько фильтров — функций php.
Первая функция преобразует все символы, которые пользователь попытается добавить в форму:
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
При этом новые переменные в php не создаются, а используются уже имеющиеся. Что сделает фильтр, он преобразует символ »
Вторая функция декодирует url, если пользователь попытается его добавить в форму.
$fio = urldecode($fio);
$email = urldecode($email);
Третей функцией мы удалим пробелы с начала и конца строки, если таковые имеются:
$fio = trim($fio);
$email = trim($email);
Существуют и другие функции, позволяющие отфильтровать переменные php. Их использование зависит от того , насколько вы опасаетесь того, что злоумышленник попытается добавить программный код в данную форму отправки данных на почту html.
Проверка данных, передаваемых от HTML формы в файл PHP
Для того, чтобы проверить, работает ли этот код, передаются ли данные можно просто их вывести на экран при помощи функции echo:
Вторая строка здесь нужна для того, чтобы разделить вывод переменных php на разные строки.
Отправляем полученные данные из формы HTML на почту при помощи PHP
Для отправки данных на почту нужно воспользоваться функцией mail в PHP.
mail(«на какой адрес отправить», «тема письма», «Сообщение (тело письма)»,»From: с какого email отправляется письмо \r\n»);
Например, нужно отправить данные на email владельца сайта или менеджера example@mail.ru.
Тема письма должна быть понятной, а сообщение письма должно содержать то, что указал пользователь в HTML форме.
mail(«example@mail.ru», «Заявка с сайта», «ФИО:».$fio.». E-mail: «.$email ,»From: example2@mail.ru \r\n»);
Необходимо добавить условие, которе проверит отправилась ли форма при помощи PHP на указанные адрес электронной почты.
if (mail(«example@mail.ru», «Заказ с сайта», «ФИО:».$fio.». E-mail: «.$email ,»From: example2@mail.ru \r\n»))
<
echo «сообщение успешно отправлено»;
> else <
echo «при отправке сообщения возникли ошибки»;
>
Таким образом программный код файла send.php, который отправит данные HTML формы на почту будет выглядеть следующим образом:
$fio = $_POST[‘fio’];
$email = $_POST[’email’];
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
$fio = urldecode($fio);
$email = urldecode($email);
$fio = trim($fio);
$email = trim($email);
//echo $fio;
//echo «
«;
//echo $email;
if (mail(«example@mail.ru», «Заявка с сайта», «ФИО:».$fio.». E-mail: «.$email ,»From: example2@mail.ru \r\n»))
< echo "сообщение успешно отправлено";
> else <
echo «при отправке сообщения возникли ошибки»;
>?>
Три строки для проверки, передаются ли данные в файл закомментированы. При необходимости их можно удалить, так как они нужны были только для отладки.
Помещаем HTML и PHP код отправки формы в один файл
В комментариях к этой статье многие задают вопрос о том, как сделать, чтобы и HTML форма и PHP код отправки данных на почту находились в одном файле, а не двух.
Для реализации такой работы нужно поместить HTML код формы в файл send.php и добавить условие, которое будет проверять наличие переменных в массиве POST (этот массив передается из формы). То есть, если переменные в массиве не существуют, то нужно показать пользователю форму. Иначе нужно принять данные из массива и отправить их адресату.
Давайте посмотрим как изменить PHP код в файле send.php:
Существование переменной в POST массиве мы проверяем PHP функцией isset(). Восклицательный знак перед этой функцией в условии означает отрицание. То есть, если переменной не существует, то нужно показать нашу форму. Если бы я не поставил восклицательный знак, то условие дословно означало бы — «если существует, то показать форму». А это неправильно в нашем случае. Естественно, что вы можете переименовать его в index.php. Если будуту переименовывать файл, то не забудьте переименовать название файла и в строке . Форма должна ссылаться на эту же страницу, например index.php. В код я добавил заголовок страницы.
Частые ошибки, возникающие при отправке PHP формы с сайта
Первая, наверное самая популярная ошибка, это когда вы видите пустую белую страницу без сообщений. Это означает, что вы допустили ошибку в коде страницы. Вам нужно включить отображение всех ошибок в PHP и тогда вы увидите, где допущена ошибка. Добавьте в код:
Файл send.php должен запускаться только на сервере, иначе код просто не будет работать. Желательно, чтобы это был не локальный сервер, так как он не всегда настроен на отправку данных на внешний почтовый сервер. Если вы запустите код не на сервере, то вам отобразиться код PHP прямо на странице.
Таким образом, для корректной работы я рекомендую поместить файл send.php на хостинг сайта. Там, как правило, все уже настроено.
Еще одна частая ошибка, когда появляется оповещение «Сообщение успешно отправлено», а письмо не приходит на почту. В этом случае нужно внимательно проверить строку:
if (mail(«example@mail.ru», «Заказ с сайта», «ФИО:».$fio.». E-mail: «.$email ,»From: example2@mail.ru \r\n»))
Вместо example@mail.ru должен быть email адрес на который нужно отправить письмо, а вместо example2@mail.ru должен быть существующий email данного сайта. Например для сайта webriz.ru это будет info@webriz.ru . Только в этом случае письмо с данными из формы будет отправлено.
Читайте также статью про немного модифицированный вариант данной формы отправки.
Расширение формы, добавление Google ReCaptcha (v.2)
По просьбам в комментариях я доработал форму, добавил в нее поле для отправки сообщения. Также для защиты от роботов я добавил Google ReCaptcha, вторую версию. Добавлено поле textarea.
Итак, имеется два файла: index.php и send.php
Программный код index.php:
Вам нужно вставить ключ сайта вместо текста в соответствующей строке.
Программный код send.php:
else < echo "При отправке сообщения возникли ошибки"; >> else < echo "Подтвердите, что вы не робот и попробуйте еще раз"; >> else < echo "поставьте галочку в поле 'Я не робот' для отправки сообщения"; >?>
Также нужно вписать секретный ключ.
