Здраствуйте, уважаемые читатели. Сегодня мы рассмотрим стандартную функцию из состава PHP четвертой версии для отправки писем —mail() — на примере организации обмена сообщениями через ICQ.
Как мы сможем эту функцию использовать? Действительно, «рыть» будем под ICQ. А так как эта функция многофункциональна, мы сегодня попытаемся «расширить общительность», а точнее, заставим ее посылать сообщения ICQ-пользователям, не прибегая к помощи самой тети Аси, через web-интерфейс с помощью обычных e-mail. У каждого пользователя ICQ по сути есть некий почтовый ящик формата ICQ UIN@pager.mirabilis.com, где вместо ICQ UIN нужно вставить только номер своего друга или подруги. Такой почтовый адрес мы и будем использовать для пересылки сообщений. Я так когда-то (и сейчас при необходимости) посылал сообщения своим друзьям — все нормально работает, как видите, доселе бодрствую. Поэтому приступим. Я полагаю, что связка Апач+РНР4+MySQL у вас настроена и работает, в противном случае смотрите соответствующие статьи Артема Шманцырева (см. цикл «Сервер племени апачей», материалы из №№38 (209), 40 (211)). Замечу только, что для работы функции mail() необходимо при установке РНР указать сервер электронной почты — иначе ничего работать не будет.
Возможность автоматической посылки e-mail по Сети, минуя использование внешних программ — одно из самых мощных средств РНР, эта функция встроена в сам язык. Синтаксис функции отправки письма такой:
bool mail (string $to, string $subject, string $msg [, string $headers])
Функция mail() посылает сообщение с телом $msg (это может быть и многострочная строка, т.е. переменная, содержащая в себе несколько строк, разделенных символом перевода строки (в нашем случае это \n и \r)) по адресу $to. Можно также задать адреса нескольких получателей, разделив их адреса пробелами в параметре $to. Например:
Mail ("vasechkin@vasja.com ivanov@ivan.com", "from ME!", "message send!!!");
Можно также все адреса задать где-то в одном месте (переменной, константе, массиве), а потом вставлять по мере необходимости. Но, здесь можно попасться еще вот на чем: русских и украинских кодировок в мире существует множество. Поэтому от того, насколько правильно вы перекодируете письмо, зависит, прочтет ли его получатель. Впрочем, «универсально правильное» решение существует. Мы сделаем по-своему: будем передавать функции mail() только адрес получателя и текст письма, а заголовок и тему будем печатать в самом сообщении. Например:
$message= "From: Рассылка To: Васечкин Вася Васильевич Subject: Пробная рассылка Content-type: text/plain; charset=windows-1251 Пробное письмо. Вы его обязательно прочитаете"; Mail ("vasechkin@vasja.vasilevich", "", $message);
Видите новую строку —Content-type? Она указывает кодировку windows-1251. Пустая строка необходима, чтобы почтовая программа смогла правильно разобрать письмо в целом и правильно его перекодировать.
Теперь от теории перейдем непосредственно к самой программе. Назовем ее Анонимный пейджер. Во-первых, программка будет выводить некую форму, в которой нужно ввести свое имя — ведь должен же ваш друг знать, от кого пришло сообщение, не правда ли? Там же будем вводить сам номер Аськи и само сообщение, для чего прилепим где-то рядом кнопки Отправить и Очистить. Теперь воспользуемся знакомой функцией mail(). Ее синтаксис в нашем случае будет таким:
mail("$to_icq@pager.mirabilis.com",$subject,$body,$headers);
Создаем файл pager.php, открываем и... сохраняем следующее:
no_name"; } if(@$message==""){ //Проверяем, введено ли сообщение $result=0; $error2="<li>no_message</li>"; } elseif (strlen($message) <= min_size) { /*Проверяем, насколько коротко введеное сообщение*/ $error3="<li>min_error</li>"; $result=0; } elseif (strlen($message) >= max_size) { /*Проверяем, не очень ли длинно введенное сообщение*/ $error4="<li>max_error</li>"; $result=0; } if (@$to_icq!==""){ if (@!eregi("^[0-9]{9,}$", $to_icq)){ /*Проверить действительность UIN'a, иначе выдать ошибку несоответствия номера*/ $error5="<li>number_error</li>"; $result=0; } } else{ $to_icq=trim($to_icq); /*Выбросим из аськиного УИНа всякие там мешающие всем пробелы*/ } if ($result==1){ /*После всех проверок можно спокойно заняться нашей задачей, а именно вызвать функцию mail() с необходимыми для нас аргументами и отослать сообщение адрусату*/ $body="$message\n";/*Ну а здесь немного служебной информации*/ $body.='<center><marquee bgcolor="navy" width="50%"><font color="white">'; $from="$name"; $headers="Content-Type: text/html; charset=windows-1251\n"; $headers.="From: $from\n"; mail("$to_icq@pager.mirabilis.com",subject,$body,$headers); Header ("Location: thank.html");/*И если все прошло нормально, то выведем соответствующую страницу об успешной отправке сообщения*/ } if ($result!==1){ /*Если мы "прoпустили" ошибку, то выведем соответствуещее сообщение*/ echo ("<title>Error send!!!</title> <center><h2><font color="h2">Ошибка отправления сообщения</font></h2></center><ol>$error1$error2$error3$error4 $error5</ol>"); } ?>
Все, с программкой закончили. Надеюсь, все понятно. Если нет, то присмотритесь к комментариям в тексте программы. Теперь надо создать файл pager.html следующей структуры:
<title><<-- Анонимный пейджер -->></title> <h3 align="center">Анонимный пейджер</h3> <form action="pager.php" method="post"> <table align="center" border="2" height="100%" width="442"> <tbody><tr bgcolor="#ff85a3"> <td height="403" width="432"> <table bgcolor="#ff85a3" width="100%"> <tbody><tr> <td align="right" valign="center" width="71%"> Введите свое имя : </td><td align="right" valign="center" width="29%"> <input maxlength="255" size="25"> </td> </tr><tr> <td align="right" valign="center" width="71%">На какой ICQ-номер отсылать: </td><td align="right" valign="center" width="29%"> <input maxlength="255" name="to_icq" size="25"> </td> </tr></tbody></table> <hr width="100%"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> <tbody><tr> <td valign="baseline" width="1" height="46"> </td> <td valign="bottom" width="416" height="46" align="center"> <p align="center"><strong>Введите текст сообщения:</strong></p> </td> </tr> </tbody></table> <p align="center"> <textarea cols="50" name="message" rows="10"></textarea> </p> <p align="center"> <input type="submit" value="Отправить"> <input type="reset" value="Очистить поля"> </p> </td> </tr> </tbody></table> </form>
Итак, нам осталось создать последний файлик —thank.html:
<title>Сообщение отправлено</title> <center> <h2> <font color="#FF0066"> Ваше сообщение успешно отправлено </font></h2><font color="#FF0066"> <hr> И, пожалуйста, не шлите спам<br> </font></center><font color="#FF0066">
Набрали, все сохранили? Теперь скопируйте эти три файла в директорию домашнего сервера или сервера в Сети. Все! Конечно, программку можно было сделать еще универсальнее, но оставляю это удовольствие для вас.
До следующей встречи!
