Обработчик отправки сообщения

Сама по себе форма не отправит сообщение для этого нужен обработчик PHP. Продолжая тему работа с куки на примере всплывающего окна, рассмотрим обработчик отправки сообщения с сайта.

Я подготовил обработчик отправки сообщения с сайта, который должен быть понятен не только опытному программисту, но и начинающему только разбираться в логике языков программирования.

Отправка сообщения с сайта на электронный адрес
Схема работы обработчика отправки сообщения с сайта

Обработчик отправки сообщения

После того как пользователь нажал кнопку отправить, он получит сообщение на указанный им электронный адрес в форме.

Сообщение может содержать теги HTML. Текст в сообщении ограничиваться только вашей фантазией. Обычно форму получения электронного адреса используют для отправки пароля, подписка на рассылку, продажи товара, завершение регистрации на сайте или форуме и т.д…

чтобы полностью увидеть работу скрипта в действии, в демонстрации отправляйте свой РЕАЛЬНЫЙ электронный адрес!

Демо

к меню ↑

Скрипт отправки данных на email

Переменная $_POST передаёт данные из поля для дальнейшей обработке их на сервере.

<?php
/*
Название плагина: Обработчик отправки сообщения
Описание: Обработчик отправки сообщения с сайта из всплывающего окна
Plugin URI: http://htmlhook.ru
Версия: 1.0
Автор: Виктор Клим
Лицензия: GPL2
*/ ?>
<?php
//если пользователь нажал кнопку отправить
if (isset($_POST['submit'])) {

Перед тем как мы продолжим обработку полученного электронного адреса, добавим список уведомлений которые буду сообщать о выполнении действий.

$ok = 'Указанный Вами e-mail принят';
$no = 'Указанный Вами e-mail не принят';
$no_key = 'Поле email - пустое';
$no_email = 'Введите корректный e-mail';

В обработчике веб-формы первым действием нужно выполнить проверку т.е верификация введенных данных. На странице «Отправить cookie в браузер» Я добавил валидатор JavaScript который выполняет проверку пустого поля и регулярные выражения для поля email. Но, что делать если каким-то образом пользователь отключил работу скриптов в браузере. На помощь нам приходит PHP для проверки пустого поля и действительно ли пользователь отправил электронный адрес а не нечто другое. Так как мы собираемся добавить эл.адрес пользователя в базу данных, нам необходимо проверить данные которые отправил пользователь. Чтобы в базу данных не записывалось ни чего кроме эл.адреса в обработчик дополняем проверку формы на PHP.

//проверка пустого поля
if (empty($_POST['email']))
exit('<script>alert("'.$no_key.'");location.replace("cookie.php");</script>');

//проверка e-mail
if (!preg_match("/[0-9a-z_]+@[0-9a-z_\-^\.]+\.[a-z]{2,6}/i", $_POST['email']))
exit('<script>alert("'.$no_email.'");location.replace("cookie.php");</script>');

Если всё прошло удачно, для дальнейшей обработки получаем электронный адрес пользователя методом $_POST.

//получаем e-mail
$email = $_POST['email'];

Дальше подключаем внешний файл для записи электронного адреса в базу данных.

//добавить e-mail в базу данных
include('db.php');

Запись в базу данных и сравнение строк  Я напишу в следующем уроке.

к меню ↑

Отправка текста в сообщении

Текст сообщения лучше подготовить заранее в любом текстовом редакторе.

//отправка текста на почту
$to = $email; // полученный e-mail
$subject = 'Ответ с сайта ...';
$message = '<html><body>Текст сообщения HTML</body></html>';
к меню ↑

Отправить письмо на почту пользователя

Необходимо заполнить обязательные заголовки, если их не заполнять или игнорировать, сообщение может попасть в спам. В любом почтовом клиенте есть кнопка очистить спам, даже не читая его. Чтобы так не произошло, нужно заполнить все заголовки обработчика отправки сообщения.

// Отправка письма на почту пользователя
$headers = array();
$headers[] = "MIME-Version: 1.0"; // тип сообщения
$headers[] = "Content-type: text/html; charset=utf-8"; //кодировка
$headers[] = "From: Имя <my-noreply@mail.com>"; // от кого сообщение
$headers[] = "Reply-To: имя получателя <{$email}>"; // email получателя из формы
$headers[] = "Subject: {$subject}"; // заголовок сообщения
$headers[] = "X-Mailer: PHP/".phpversion(); // версия PHP
$headers[] = "Return-Path: <myemail@mail.ru>"; // email отправителя сообщения
$headers[] = "Ответ на Ваш запрос"; // подзаголовок сообщения
к меню ↑

Функция mail()

Функция mail() отправит массив заголовков и текст с тегами HTML.

// Функция mail()
if (mail( $to, $subject, $message, implode("\r\n", $headers)))
echo '<script>alert("'.$ok.'");location.replace("cookie.php");</script>';
else echo '<script>alert("'.$no.'");location.replace("cookie.php");</script>';
}
к меню ↑

Получить e-mail на электронный адрес

— как узнать на какой адрес отправилось сообщение?

Конечно можно вывести список из базы данных всех электронных адресов. А можно сделать проще, добавить еще одну функцию mail() которая доставит нам на указанный e-mail информацию когда и на какой эл.адрес было выслано сообщение.

// свои электронный адрес
$to = 'myemail@mail.ru';

// Функция mail()
if (mail( $to, $subject, $message, implode("\r\n", $headers)));

После отправки сделаем так чтобы окно с формой не появлялось 30 дней.

// Куки на 30 дней
setcookie( 'popup', $email, strtotime( '+30 days' ), '/' );
к меню ↑

Заключение

В этой записи Я привел пример работающего обработчика формы отправки сообщения. Как видите отправить сообщение пользователю с сайта функцией mail() не сложно. В следующей статье я напишу как добавить электронный адрес пользователя в базу данных с подключением PDO.