Обработчик формы php и отправка на email
Делаем форму обратной связи на сайте
Говорят, что если программист может написать форму обратной связи, он может написать всё.
Форма обратной связи — древнейшее программистское искусство. Тут есть всё: форма с проверкой, приём запроса, обработка, безопасность, хранение и ответ. Это как Hello World, только для самых крутых.
В сегодняшней версии программы — только самые основы этого упражнения. В следующих частях мы прокачаем систему.
Смысл программы в том, что посетитель страницы заполняет нужные поля, пишет текст сообщения и нажимает кнопку «Отправить». На почту владельцу сайта приходит письмо с текстом сообщения и данными о том, кто это сообщение отправил.
Чтобы сделать у себя на сайте такое, нам понадобится:
Сервер для PHP
Для того, чтобы PHP-код исполнялся, нужен какой-то компьютер-исполнитель. Мы называем его сервером — то есть «раздающим». На сервере должна работать программа для PHP, которое отвечает за правильную обработку таких файлов.
Когда мы делали проект «Публикуем свою страницу в интернете», то уже использовали сервер (эту услугу нам предоставила хостинговая компания SpaceWeb). Этот же сервер мы можем использовать для нашей сегодняшней задачи, потому что он тоже умеет работать с PHP-файлами:
Готовим страницу с формой
Возьмём стандартный шаблон страницы и наполним его стилями и кодом для формы.
Пропишем CSS-стили, чтобы наша страница выглядела опрятно. Забежим немного вперёд и используем в стилях разделы input и textarea :
Чтобы сделать форму на странице, мы будем использовать такие теги:
— для ввода имени, почты для связи и темы письма. Они занимают одну строку, нам этого достаточно.
— здесь будут писать само сообщение, поэтому нужно будет сделать это поле побольше и пошире.
Ещё мы воспользуемся тегом
Пишем обработчик формы на PHP
Когда мы заполним и отправим форму на нашей странице, произойдёт следующее:
Логика работы PHP-программы будет такая:
Отправляем PHP-скрипт на сервер
Последнее, что осталось сделать — загрузить файл скрипта на сервер. Для этого сохраним его как post.php и загрузим по адресу mihailmaximov.ru/projects/mail/post.php. Если у вас ещё нет своего сервера, можете использовать этот скрипт для тестирования формы обратной связи.
Как загружать файлы, мы рассказывали в статье про публикацию сайта в Сети, поэтому просто сделаем всё по той инструкции:
Теперь, когда мы обновим HTML-страницу, заполним все поля и нажмём «Отправить», на указанную почту придёт письмо с нашим сообщением. Это значит, что форма работает, а мы с вами сделали очередной полезный проект!
Что дальше
Дальше как обычно — улучшаем.
Простейшая форма отправки данных на почту при помощи HTML и PHP
Одной из самых востребованных функций на сайте является форма заявки или заказа, данные из которой отправляются на почту владельцу сайта. Как правило такие формы являются простыми и состоят из двух трех полей для ввода данных. Как же создать такую форму заказа? Здесь потребуется использование языка разметки HTML и языка программирования PHP.
Язык разметки HTML сам по себе несложен, нужно всего лишь разобраться в том как и где ставить те или иные теги. С языком программирования PHP все немного сложнее.
Для программиста создать такую форму не составит труда, а вот HTML верстальщику может показаться сложным некоторые действия.
Создаем форму отправки данных в html
На этом этапе нужно создать файл form.php, в него добавить html код формы. Подробности о каждом элементе формы читайте в статье Как сделать форму в HTML для сайта.
Первая строка будет следующей
Теперь соберем все вместе.
Теперь сделаем так, чтобы поля в форме стали обязательными для заполнения. Имеем следующий код:
Создаем файл, принимающий данные из HTML формы
Это будет файл с именем send.php
В файле на первом этапе нужно принять данные из пост массива. Для этого создаем две переменные:
Первая функция преобразует все символы, которые пользователь попытается добавить в форму:
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
Третей функцией мы удалим пробелы с начала и конца строки, если таковые имеются:
$fio = trim($fio);
$email = trim($email);
Проверка данных, передаваемых от HTML формы в файл PHP
Для того, чтобы проверить, работает ли этот код, передаются ли данные можно просто их вывести на экран при помощи функции echo:
Вторая строка здесь нужна для того, чтобы разделить вывод переменных php на разные строки.
Отправляем полученные данные из формы HTML на почту при помощи PHP
Для отправки данных на почту нужно воспользоваться функцией mail в PHP.
mail(«на какой адрес отправить», «тема письма», «Сообщение (тело письма)»,»From: с какого email отправляется письмо \r\n»);
Например, нужно отправить данные на email владельца сайта или менеджера example@mail.ru.
Тема письма должна быть понятной, а сообщение письма должно содержать то, что указал пользователь в HTML форме.
Необходимо добавить условие, которе проверит отправилась ли форма при помощи PHP на указанные адрес электронной почты.
Таким образом программный код файла send.php, который отправит данные HTML формы на почту будет выглядеть следующим образом:
Три строки для проверки, передаются ли данные в файл закомментированы. При необходимости их можно удалить, так как они нужны были только для отладки.
Помещаем HTML и PHP код отправки формы в один файл
В комментариях к этой статье многие задают вопрос о том, как сделать, чтобы и HTML форма и PHP код отправки данных на почту находились в одном файле, а не двух.
PHP форма обратной связи с отправкой на email
Вы когда-нибудь хотели установить на свой сайт форму обратной связи? Наверняка Вы встречались с подобными скриптами. Как ни странно, готовые скрипты отправки формы на email пользуются большой популярностью (Вы можете убедиться в этом в любом архиве скриптов), причем их существует великое множество. Есть простые, в которых ничего не меняется, а есть сложные и большие системы, которые функционируют на mysql, позволяют динамически изменять любые поля, содержат кучу настроек… Но так ли они нужны? На мой взгляд необходимость в подобных системах очень сомнительна.
Тестировать отправку почты на домашнем компьютере не получиться. Для этого Вам необходим хостинг с поддержкой php и функциями отправки почты. Я рекомендую Вам хостинг-провайдера runweb.ru. Этот провайдер предлагает отличные тарифы, высочайшую скорость доступа и отличное обслуживание.
Методы отправки почты
Отправлять почту с сервера с помощью php можно двумя основными способами.
Я хочу рассмотреть оба этих способа по порядку.
Первый и самый простой — это использование php функции mail(). Функция очень простая и понятная, хотя отправка почты с использованием mail() имеет и ряд недостатков. Самый главный — письмо отправляется не напрямую, а через php. Одновременно программа php подставляет в письмо некоторые свои поля. Например, у Вас не получится корректно указать отправителя. В поле «from» (то есть от кого пришло письмо) в большинстве случаев будет стоять имя сервера. Все дело в том, что php подставляет свои заголовки в служебную строку письмо «from».
Тем не менее отправка почты с помощью функции mail() остается самым простым
способом отправить письмо с сервера. Давайте рассмотрим этот способ подробнее.
Функция mail() имеет следующий синтаксис:
Вот полный пример отправки почты с помощью mail():
Обратите внимание, что при использовании этой функции на домашнем компьютере она может выдавать ошибку, так как не может отправить письмо без почтового сервера.
Теперь давайте посмотрим, как можно отправить письмо с помощью sendmail.
sendmail — это стандартная программа операционной системы unix, которая отправляет почту.
php может запускать unix-программы путем использования средства pipes (дословно «трубопроводы»). Это средство unix позволяет направлять данные из одной программы в другую, наподобие того, как мы пишем в файл. Только файлом в этом случае выступает программа (в частности, sendmail), которая и получает данные.
sendmail программа имеет множество параметров, мы будем использовать некоторые из них. Чтобы использовать sendmail, нужно открыть к нему поток (pipe). В php это делается использованием команды popen(), которая по синтаксису идентична команде fopen(). Путем использования popen() мы открывает поток к sendmail
для записи в него (помните, параметр режима «w»?), после чего можно отправлять в него данные обычной командой fputs(). Посмотрим, как полностью выглядит процедура отправки письма через sendmail:
Теперь давайте рассмотрим пример использования возможностей отправки почты. Для этого мы сделаем форму обратной связи, которую Вы сможете установить на свой сайт. В качестве метода отправки письма мы будем использовать sendmail.
Создаем форму обратной связи
Наша форма обратной связи будет представлять собой один скрипт. Этот скрипт будет выводить форму и отправлять письмо.
Теперь, если все правильно, мы описываем необходимые переменные и rfc заголовки письма, после чего отправляем сообщение через sendmail и выводим сообщение о результате (отправлено/не отправлено). Здесь все просто и понятно из предыдущих примеров.
Собственно это и все, что необходимо, чтобы сделать форму обратной связи на Вашем сайте 🙂
Как видите, ничего сложного нет и программа получается довольно маленькая.
Простая форма обратной связи на PHP. Отправка данных из формы на почту
Сегодня я вам покажу самую простую форму обратной связи на HTML и PHP. Весь код, с описанием, представлен в записи. Для создания формы вам понадобятся базовые знания HTML и PHP.
Для того чтобы ваша форма работала, необходимо:
Здесь стандартный базовый шаблон.
В body, мы пишем вывод сообщений и форму, которая будет состоять из нескольких полей, в нашем случае это email, имя и сообщение. Для каждого поля нужно задать уникальный атрибут name.
Теперь перейдём в PHP:
Скрип читается так…
Если кнопка btn_submit нажата, то создается массив errors в который мы будем записывать ошибки.
Теперь проверим форму на заполненность полей, если какое либо поле не заполнено, то мы выводим соответствующие ошибки.
Далее если массив ошибок пуст, то мы запускаем обработчик. В переменную message мы записываем данные которые будут отправлять вам на почту.
После этого мы записываем функцию отправки формы send_mail($message). Функцию я записал чуть ниже. Отправляется сообщение и выводится текст об успешной отправке.
Функция обработки выглядит, следующим образом…
В переменную mail_to мы записываем адрес почты на которую будет отправляться письмо.
В переменную subject записывается название письма.
Далее идут правила обработки формы. Здесь же мы пишем от кого письмо и вводим адрес почты.
И в конце мы отправляем форму через функцию mail.
На этом все. Вот так выглядит полный код формы обратной связи.
Используем свой PHP-обработчик Mobirise для отправки почты.
В предыдущей заметке, разобрали с вами два способа, как можно настроить форму обратной связи для Mobirise без formoid. Как и говорили раннее, разберем сегодня способ подключения PHP обработчика для настройки формы связи Mobirise. Данный способ примечателен тем, что позволяет настроить и использовать любую форму контактов, которая доступна в темах Mobirise.
Заказать разработку и установку формы связи для сайта, без лишних хлопот и по доступной цене.
Скрипт формы связи без капчи, в обход formoid Mobirise с перенаправлением на страницу благодарности, работает на хостинге с поддержкой PHP не ниже версии 5.6. Для безопасной и надежной работы, рекомендую использовать версию PHP 7.0 или выше. Отдельно стоит обратить внимание, что скрипт не работает на версии PHP 8.0.
Из минусов, данная форма не поддерживает AMP темы Mobirise и нет возможности подключить Google reCAPTCHA. При этом, в Сети можно найти подобное решение. Однако, там не работает решение на PHP выше 5.6 версии. В добавок, решение предполагает размещение e-mail адреса прямо в открытом виде в html коде сайта.
В решении ниже, нам не нужно размещать e-mail адрес в html коде страницы, что значительно сокращает количество спама. В добавок, почтовый PHP обработчик для Mobirise, работает с более новыми и безопасными версиями PHP.
Данный PHP-обработчик Mobirise подойдет для тех, у кого бесплатная версия Mobirise (для платной версии Mobirise, также подойдет) и нужна форма связи без рекламы в письмах от Mobirise с возможностью использовать стандартную форму связи и настраивать перенаправление пользователей на свою страницу благодарности.
Шаг 1.
Свой PHP-обработчик Mobirise, для независимой контактной формы (формы обратной связи).
Скачиваем архив «Почта Mobirise без капчи (phpmailer 5.2).zip» с моего Google Диска.
После распаковки архива, открываем файл «mailscript.php». Можно использовать редактор Notepad++. Редактируем нужные параметры:
При необходимости, можете настроить и другие параметры, под свои нужды. Сохраняйте изменения файла «mailscript.php» и заливайте это все в корень своего сайта. Залить нужно файл «mailscript.php» и папку «PHPMailer-5.2-stable».
Шаг 2.
Подключение PHP-обработчик Mobirise к почтовой форме в конструкторе сайтов.
Теперь, нам необходимо подключить сам PHP-обработчик к форме обратной связи в программе Mobirise. Открываем свой проект, добавляем любую форму связи. Открываем настройки формы, настраиваем поля формы (1.) и в поле «Email адрес для уведомления или URL» (2.) указываем «mailscript.php» (без кавычек) и сохраняем настройки (3.):
Выгружаем свой сайт на хостинг и проверяем результат. Уточню, что на хостинге, должна быть поддержка PHP. На некоторых хостингах, PHP бывает отключен по умолчанию или активируется за дополнительную плату.
Надежный хостинг с немецким качеством по доступной цене.
При попытке проверить результат через предпросмотр, вы ничего не проверите. Работать не будет.
Важно. Раньше, Mobirise использовала в html коде формы, «message». В версии Mobirise 5 теперь, использует в html коде «textarea».
Проверяйте это, для корректной работы формы (по умолчанию, установлен в «mailscript.php» параметр «textarea»). На темах Mobirise 4 используется «message», поэтому, кто будет подключать скрипт к сайту на теме Mobirise 4, меняйте в файле код:
Данный PHP-обработчик работается на модифицированной PHPMailer 5.2.28. Используемые исходники PHPMailer 5.2.28:
https://github.com/PHPMailer/PHPMailer/tree/5.2-stable
Если есть опыт, возможность или желание учится, может реализовать свое решение на последней версии: https://github.com/PHPMailer/PHPMailer
В следующей заметке, рассмотрим сторонний сервис для создания формы обратной связи.
Вы также можете делится своими решениями и идеями в комментариях. Ваша информация, может помочь другим пользователям. Успехов.