RTFM! статьи, советы, скрипты
::Заработок с помощью сайта ::JScript по-русски! ::Все русские мануалы::
МЕНЮ
О САЙТЕ
НОВОСТИ
СТАТЬИ
КНИГИ
АППЛЕТЫ
СВЯЗЬ

СЧЕТЧИКИ
Rambler's Top100
Рейтинг@Mail.ru
Яндекс цитирования

Своя рассылка ближе к делу

Автор: Владислав ПУТЯК Сайт: http://docs.com.ru/     Рейтинг: N/A из 7       <<НАЗАД
   
   В Интернете есть много бесплатных сервисов, в том числе и услуги по рассылке писем подписчикам. Некоторые, причем, очень хороши. Одна беда — раз сервис бесплатен, значит, придется мириться с рекламой. Да и громоздкие формы для подписки, с логотипом предоставляющей услуги конторы, многих не устраивают. Так почему бы не написать простенький движок для своей рассылки, чтобы отсылать письма своими силами?
   
   Давайте разберемся, что нам для этого потребуется. Для того чтобы посетители имели возможность подписаться на вашу рассылку, необходима форма для ввода адреса электронной почты. Давайте адреса будем сохранять в файле maillist.txt, по одному в строчке. После того как адрес будет сохранен, выведем соответствующее сообщение и отобразим форму для следующего адреса или для удаления существующего. Считайте, дело в шляпе. Осталось добавить только возможность отправки писем. Для безопасности давайте на функцию отправки писем поставим пароль — необходима форма для ввода пароля. Далее потребуются формы для заполнения адреса отправителя и темы, а также для самого текста. Ну и, наконец, сам скрипт, который будет отсылать письма. А теперь все по порядку.
   
   Форма для ввода адреса электронной почты будет состоять только из окна ввода адреса и кнопки для подтверждения:
   
   <form method="post" action="ras.php" enctype="multipart/form-data">
   <input type="text" name="email" size="30">
   <input type="submit" name="submit" value="подписаться"></form>
   
   
   Итак, в окне для ввода текста, с именем Email и видимой длиной в 30 символов, будет вводиться адрес электронной почты. После нажатия на кнопку с надписью Подписаться, адрес будет передан скрипту ras.php для занесения в базу рассылки.
   
   Далее давайте расмотрим скрипт ras.php, который будет сохранять адрес почты в файле, выводить сообщение о результате и формы для подписки и отписки. Скрипт можно исполнить совсем просто — сохранить адрес, вывести соответствующее сообщение. Но могут возникнуть проблемы: кто-то может случайно подписаться несколько раз, кто-то может допустить опечатку, введя в поле адреса недопустимый символ, или и вовсе вписать какую-нибудь белиберду. В таком случае база рассылки будет загрязняться, а неверные адреса станут приводить к ошибкам в работе скрипта. Вывод ясен — перед сохранением адреса следует проверить его на соответствие стандартам имен адресов электронных почтовых ящиков, а также на наличие в базе рассылки. Для наглядности и удобства дам комментарии в самом коде:
   
   <?
   $file = "maillist.txt"; // файл, содержащий адреса
   error_reporting(0); // запрещаем вывод сообщений о возможных ошибках
   function test_mail($char) // функция, проверяющая реальность адреса
   {
   $flag = false;
   if (eregi("^[_\.0-9a-z-]+@([0-9a-z][-0-9a-z\.]+)\.([a-z]{2,3}$)", $char)) $flag = true;
    if ($flag) return true;
    else return false;
   }
   
   $email = trim(strtolower($email)); // получаем введеный в форму адрес с символами в нижнем регистре
   function copy_mail($char) // проверяем, есть ли такой адрес в базе
   {
   $file = "maillist.txt";
   $list = file($file);
   for ($i = 0; $i < sizeof ($list); $i++)
   if ($char == trim($list[$i])) $flag = true;
   if ($flag) return true;
    else return false;
   }
   echo "<center>";
   if (is_file($file)) // далее проверяем адрес вышеописаными функциями
   {
    $maillist = file($file);
    if (!$email == '') {
    if (test_mail($email)) {
    if (!copy_mail($email))
   {
    $maillist[] = "\n$email";
    print "E-mail: $email добавлен базу рассылки</center>";
   }
    else print "E-mail: $email уже есть в базе</center>";
   }
    else print "E-mail: $email не существует</center>";
   }
   else print "</center>";
   }
   else print "Не найден файл $file ! Пожалуйста <A HREF=\"mailto:$fromemail\">сообщите</a> мне об ошибке.</center>";
   // выводим на экран форму с предложением подписаться/отписаться
   echo "<br><center>Подписаться на рассылку<form method=\"post\" action=\"ras.php\" enctype=\"multipart/form-data\">";
   echo "Введите mail:<input type=\"text\" name=\"email\" size=\"30\"><input type=\"submit\" name=\"submit\" value=\"подписаться\"></form></center>";
   echo "<CENTER><br><br><form method=\"post\" action=\"ras.php\" enctype=\"multipart/form-data\">";
   echo "Отписаться от рассылки<br>Введите mail:";
   echo "<input type=\"text\" name=\"delmail\" size=\"15\"><input type=\"submit\" name=\"submit\" value=\"Отписаться\"></form></CENTER>";
   // если пользователь решил отписаться — удаляем введеный адрес
   $flag = false;
   $fw = fopen($file, "w");
   for ($i = 0; $i < sizeof ($maillist); $i++)
    if (trim(strtolower($delmail)) == trim(strtolower($maillist[$i]))) {
    if (!$delmail == '')
   {
    print "<center>$delmail удален из базы рассылки</center>";
    $flag = true;
   }
   }
    else fputs($fw, $maillist[$i]);
    fclose($fw);
    if (!$delmail == '')
    if (!$flag) print "<center>$delmail не найден в базе рассылки</center>";
   ?>
   
   
   Вот наш код сохранения/удаления адресов и готов. Теперь надо позаботиться о средствах отправки почты. Не будем же мы через Outlook отсылать :-)! Как уже говорилось, защитим возможность отправки паролем, который будем вводить в специальной форме:
   
   <form method="POST" action="out.php">
   <input type="password" name="pass" value="">
   <input type="submit" value="войти">
   </form>
   
   
   Поле ввода с именем pass и будет принимать пароль. После нажатия на кнопку с надписью «Войти» пароль будет передан скрипту out.php:
   
   <?
   $subject = "Рассылка моего сайта"; // тема рассылки
   $fromemail = "мое@мыло"; // ваш адрес (для ответов)
   $file = "maillist.txt"; // список адресов подписчиков
   $password = "secretpassword"; // ваш пароль для рассылки
   if ($pass == $password) // если пароль ввели правильный то выводим форму с полями для ввода: адрес отправителя, текст письма, тело письма, а также кнопку отправления, после нажатия на которую передаем данные скрипту send.php
    {
    echo "<font size=\"-1\"><hr><form method=\"POST\" action=\"send.php\">";
    echo "адрес отправителя<br><input type=\"text\" name=\"fromemail\" value=\"$fromemail\" size=\"25\"><br>";
    echo "тема письма<br><input type=\"text\" name=\"subject\" value=\"$subject\" size=\"50\">";
    echo "<br>текст письма:<br><textarea name=\"body\" rows=\"8\" cols=\"50\"></textarea>";
    echo "<br><input type=\"submit\" value=\"Отправить сообщение\"></form></font>";
    print "<i>В базе<b>". sizeof($maillist) ."</b> адресов</i><br><hr>";
    for ($i = 0; $i < sizeof ($maillist); $i++) print $maillist[$i]. "<br>";
    }
   // если пароль неверный — просим ввести еще раз
   else echo "<form method=\"POST\" action=\"ras.php\"><input type=\"password\" name=\"pass\" value=\"\"><input type=\"submit\" value=\"Управление\"></form>";
   ?>
   
   
   Осталось рассмотреть только один скрипт — тот самый, который будет отсылать почту:
   
   <?
   $odr = "\n\n\n Для отказа от подписки воспользуйтесь ссылкой\n";
   $homepage = "http://адрес.сайта/ras.php";
   error_reporting(0);
   $subject = $HTTP_POST_VARS["subject"];
   $body = $HTTP_POST_VARS["body"];
   $subject = stripslashes($subject);
   $body = stripslashes($body);
   $file = "maillist.txt";
   $maillist = file($file);
   print "В базе". sizeof($maillist) ." адресов<br>";
   for ($i = 0; $i < sizeof ($maillist); $i++)
   {
    #echo($maillist[$i]."<br>");
    mail($maillist[$i], $subject,
    $body ."$odr $homepag?delmail=$maillist[$i]",
    "From: $fromemail");
   }
   echo "Готово!";
   ?>
   
   
   Тут все просто: получаем значения, введенные в предыдущую форму и в цикле отправляем их по очереди на каждый из адресов.
   
   Ну что, не так ведь все страшно, как казалось? Теперь вы имеете мощный инструмент для ведения своей собственной рассылки. Что хотите, то и пишете. Полная свобода по части конфигурации и внешнего вида форм.
   
   Разумеется, данный код является лишь минимальным набором. Например, с помощью функции mail можно организовать себе извещение о новом подписчике, а подписчику — об удачной регистрации, можно предусмотреть высылку справочной информации.
   
   Разумеется, говоря о полной свободе, я ни в коем случае не имел в виду принудительную подписку :-) или, проще говоря, спам. Если вдруг кто решит рассылать спам таким образом, пусть учтет, что на него сразу начнут жаловаться администрации хостинга. И неважно, платный хостинг или нет — если администрация хостинга заметит подобные действия, она аннулирует предоставление своих услуг без возмещения убытков. А с халявными хостингами еще туже. Во-первых, надо испросить персональное разрешение у администрации на открытие данной функции, во-вторых, как правило, на них выставлен лимит — 1 письмо за минуту. Одним словом, господа спамеры, обломайтесь :-).
   
   На такой вот веселой ноте и закончим.
   
   
   


<<НАЗАД      ОЦЕНИТЬ СТАТЬЮ    ВЕРСИЯ ДЛЯ ПЕЧАТИ>>
Статья прочитана :  раз.




пейкюлю



 
 
 
 
 
pauk ©® 2000-2015. All rights reserved.
При перепечатке ссылка на сайт и указание обязательны.
Мнение администрации сайта не всегда совпадает с мнением автора.
Орфография и пунктуация - авторские.
Администрация не несет никакой ответственности за использование материалов.
.
Protected by Copyscape DMCA Takedown Notice Infringement Search Tool