Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #30, МАЙ 2003 г.

Mail Sender

Владимир Егоров aka Dr.NET

Спецвыпуск Xakep, номер #030, стр. 030-034-2


$text = $HTTP_POST_VARS['text'];

if (mail($rcptto,$subj,$text))

{

print "<h4>Сообщение отослано</h4>";

} else {

print "<h4>Произошла ошибка</h4>";

}

} else {

print "<h4>Введенный текст не является адресом электронной почты. ";

print "Пример адреса: <code>me@myhost.ru</code>.</h4>";

print "<a href=\"javascript:history.back(1);\"><<Назад</a>";

}

?>

</body>

</html>

Конкретно об общем

Проще и быстрее всего это сделать с помощью регулярных выражений. Регулярные выражения - это такие строки-шаблоны, с помощью которых можно, например, проверить, удовлетворяет ли строка каким-нибудь требованиям. По регулярным выражениям написаны тучи мануалов и книг, поэтому я не буду подробно задерживаться на их описании, а лишь вкратце объясню принцип на примере адреса электронной почты. Итак, строка e-mail'а должна быть построена с учетом следующих требований: а) должен присутствовать знак @; б) слева от знака @ должно стоять как минимум одно слово или несколько слов, разделенных точкой или дефисом; в) справа от знака @ должны стоять как минимум два слова, разделенные точкой. Все эти условия определяет следующее регулярное выражение: /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/. И нечего мне тут улыбаться! Лучше слухай мануал по данной строке. Отдельный ахтунг тому, что регулярное выражение записано между / и /. Запись \w+ соответствует одному или более слову. Круглые скобки выделяют отдельные подшаблоны. Звездочка * после подшаблона обозначает, что в проверяемой строке данный подшаблон может встретиться сколько угодно раз. В том числе и ни одного. После того как написали регулярное выражение, его надо использовать по назначению :). Для этого в PHP существует специальная функция preg_match(string pattern, string subject [, array matches]). В простейшем случае у нее два параметра: pattern и subject. Pattern - это, собственно, наше регулярное выражение, а subject - тестируемая на соответствие строка.

Функция возвращает true, если subject соответствует регулярному выражению, и false - в противном случае. Теперь понятно, что нам делать - после проверки на пустоту $rcptto сразу же проверяем истинность preg_match("/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/", $rcptto). Если все ОК, то двигаем дальше, если нет - пишем отмазу и учим посетителя правильно жить.

Посылаем в...

Двигать дальше значит (наконец-то!) послать наше (нет, все-таки чужое) сообщение. Для этого в PHP существует целая функция mail(string to, string subject, string message [, string headers, [string parameters]]). Нам с тобой будут нужны только первые три параметра. Первый (to) - это адресат письма, второй (subject) - тема письма, ну и третий (message) - сам текст письма. В качестве первого параметра используем $rcptto, а второй и третий берем из $HTTP_POST_VARS['subject'] и $HTTP_POST_VARS['text']. Ты можешь спросить: "А от кого будут приходить все эти письма, то есть чей адрес будет написан в поле from при получении?". Ответ такой: отправитель для функции mail задается либо параметром "sendmail_from" в файле php.ini (под WinXXX он обычно лежит в %SystemRoot% - корневом каталоге системы), либо в переменной "headers" в формате "From: me@myhost.com".

Назад на стр. 030-034-1  Содержание  Вперед на стр. 030-034-3