Кук-бук. Рецепт отправки письма с сайта

На смену теплым летним дням пришли горячие осенние будни. Клиенты зашевелились, работы прибавилось, а вместе с солидными проектами рыбками- прилипалами прилетело множество мелких задач и задачек, решать которые самостоятельно – то же самое, что изобретать велосипед: долго, дорого и неэффективно. Для того чтобы избежать этого, многие составляют себе своеобразную книгу рецептов – cook book. Сегодня, например, мне понадобилось отправлять письма с сайта. Получите рецепт.

Если вам интересна конкретная задача – мне было нужно сформировать на страничке сайта заказ и отправить его исполнителю на e-mail. Не буду вдаваться в подробности работы интерактивного прайс-листа и сосредоточусь непосредственно на получении данных от пользователя и формировании письма.

Часть web-страницы, отправляющая данные на сервер, выглядит приблизительно так:

|<<
|action="/form_processor.php" |
|method="post" |
|id="form1" |
|onsubmit="form1submit();return(false);">>> |
|<<|id="personename" |
|value="имя заказчика">>> |
|<<|id="personephone" |
|value="контактный телефон">>> |
|<<|name="zakaz" |
|id="zakaz">>> |
|<<|type="submit">>> |
|<<
>> |

Это обычная HTML-форма, отправляющая серверному скрипту несколько параметров:

personename – имя заказчика,
personephone – контактный телефон для подтверждения заказа,
zakaz – непосредственно строчка с заказом.

Если вы обратили внимание, для формы определена функция события «onsubmit». Эта функция вызывает другую функцию («form1submit») для проверки введенных данных и возвращает значение «false», чтобы без этой проверки данные отправлены не были. Скрипт, описывающий эту функцию, выглядит примерно так:

|<<>> |

Что делает эта функция:
1. Создает переменную, означающую правильность ввода: «ok».
2. Создает пустое сообщение для пользователя: «msg».
3. Если значение поля имени заказчика осталось неизмененным, добавляет к сообщению соответствующее предупреждение и меняет значение «ok» на отрицательное.
4. Если значение поля телефона заказчика осталось неизмененным, делает то же, что и в п.3.
5. Если значение поля заказа осталось неизмененным, делает то же, что и в п.3.
6. Если значение «ok» не поменялось, отправляет данные на сервер, иначе выдает окошко с предупреждением msg.
С клиентской частью мы разобрались, теперь переходим к серверной. Она состоит из одного небольшого скрипта «form_processor.php»,
находящегося на вашем web-сервере. Этот скрипт будет разбирать пришедшие от клиента данные, составлять из них e-mail и отправлять на заданный вами адрес (или несколько адресов). Вот как он выглядит в текстовом редакторе:

|<<|$to = "inbox@server.com" ; |
|$subject= "=?utf-8?B?". base64_encode("Заказ с сайта"). "?="; |
| |
|$crlf = "\r\n"; |
|$msg = '<<>><<>>'; |
|$msg .= '<<>>'; |
|$msg .= '<<>><<>>'; |
|$msg .= "Заказчик: ".$_POST["personename"].$crlf."<<
>>"; |
|$msg .= "Телефон: ".$_POST["personephone"].$crlf.$crlf."<<
>>"; |
|$msg .= $_POST["zakaz"]."<<>><<>>"; |
| |
|$headers = "Content-type: text/html; charset=utf-8\r\n"; |
|$headers .= "Content-Transfer-Encoding: quoted-printable\r\n"; |
|$headers .= "From: artline.biz\r\n"; |
| |
|$msg= preg_replace ("/=/i", "= ",$msg); |
|$msg= preg_replace ("/\\\'/i", "'",$msg); |
| |
|mail($to, $subject, $msg, $headers); |
|?>>> |
|<<>> |

Чтобы избежать лишних мучений в будущем, я сразу отправляю письмо в HTML-формате. Это позволяет использовать в нем сложное форматирование, например таблицы. В данном случае была использована горизонтальная черта <<
>>, чтобы отделить контактные данные клиента от данных заказа. После того, как скрипт на сервере отработает, на адрес «inbox@server.com» будет отправлено письмо с данными от вашего клиента, а строчка «document.location=…» в конце скрипта вернет пользователя назад, на страницу, с которой он отправлял данные.

Вот такое легкое диетическое блюдо из моего личного кук-бука. Готовьте на здоровье!

Поляков Александр. Lecosson@mail.ru


Компьютерная газета. Статья была опубликована в номере 42 за 2009 год в рубрике интернет

©1997-2022 Компьютерная газета