WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Архив » Список рассылки новостей Perl

Список рассылки новостей Perl


Дата публикации: 17-03-2013

Помимо гостевой книги основным атрибутом серьезного Web-узла является список рассылки новостей. Perl-программа для выполнения рассылки довольно проста, при желании ее можно несколько улучшить, добавив новые возможности (см. листинг 9).

При создании Web-узла, ориентированного как на русскоязычных, так и на англоязычных посетителей, в программе предусмотрена возможность выдачи сообщений в соответствующем виде. Основная форма (рис. 3) в зависимости от языка узла должна обязательно содержать поле:

<input type=»hidden» name=»lang» value=”english”> 

или

<input type=”hidden” name=”lang” value=”russian”>

для распознавания языка выдачи сообщений.

Чтобы облегчить разбор программы рассылки новостей, в ней расставлены комментарии.

Листинг 9. Список рассылки новостей
 
#!/usr/local/bin/perl
############################
# SCRIPT: POSTER.CGI       #
# (c) Michael Yevdokimov   #
############################
 
require ‘cgi_lib.pl’;
 
$PathList=”../mlist”; #физический путь к каталогу с базой посетителей
$PathNews=”../mnews”; #физический путь к каталогу с документом для посылки
$ReturnPage=”index.html” #страница, к которой нужно будет возвратиться
 
$mail_prog=”/usr/sbin/sendmail”; #физический адрес к почтовой программе
$Title=”News List”; #заголовок списка рассылки
$From=”maillist\@mysite.ru”; #адрес списка рассылки
$Website=”www.mysite.ru”; #источник списка рассылки для Subject
# Method Detection and Decoding
&Parse_Data;  # декодировать данные из формы / URL
 
$Lang=$CGI{‘lang’};  # тип языка (Рус/Англ) 
$User=$CGI{‘user_name’}; # имя посетителя
$Email=$CGI{‘user_email’}; # email посетителя
$Flag=$CGI{‘flag’}; # флаг для проверки некоторых условий в программе
$Command=$CGI{‘command’}; # считать команду (send или ‘’)
 
if ($Lang eq ‘english’) {
    $db=”userbase.eng”; # база с иностранными подписчиками
        $nf=”news.eng” # английская ”посылка” (обычный TXT)
} else {
        if ($Lang eq ‘russian’) {
            $db=”userbase.rus”; ” с российскими подписчиками
        $nf=”news.rus”; русская ”посылка” (обычный TXT)
        } else {
        &Print_Head; # аналогично print ”Content-type:text/html\n\n”;
        print ”<H3>ATTENTION! ERROR OCCURED!<H3>\n”;
        print ”PRESS <A HREF=\”$ENV{‘HTTP_REFERER’}\”>[BACK]</A> TO RETURN!\n”;
        exit(0);                       
        }
}
 
if ($Command eq ‘send’) { # проверка той самой команды
     if ($db eq ‘userbase.eng’) {
        #Post English News
        &Post_News($User,$Email);
    } else {
        #Post Russian News
        &Post_News($User,$Email);
    }     
}
 
#Проверить значение атрибута flag
if ($Flag eq ‘eng_yes’) { # если информация верна
    &Check_Email; # вызвать подпрограмму проверки введенного email
    &Add_Record($Path,$db); # добавить запись в соответ. базу
    &Print_Head; 
    print ”Your records were added to database\n”;
    print ”Click <a href=\”/$ReturnPage\”>here</a> to return...\n”;
        exit(0);
} else {
    if ($Flag eq ‘rus_yes’) {
    &Check_Email;
    &Add_Record;
    &Print_Head;
    print ”Ваши данные занесены в базу данных\n”;
    print ”Нажмите <a href=\”/$ReturnPage\”>здесь</a> для возврата...\n”;
            exit(0);
    } else {
    }
}
 
# вывести форму подтверждения правильности введенной информации
if ($db eq ‘userbase.eng’) { 
#Английский вариант формы
  &Print_Head;
  print ”<H2><b>News List Registration</b></H2>\n”;
  print ”<PRE>\n”;
  print ”<FORM METHOD=\”GET\” ACTION=\”/cgi-bin/poster.cgi\”>\n”;
  print ”<input type=hidden name=lang value=english><br>\n”;
  print ” Your Name: <input type=text name=user_name size=15 value=\”$User\”><br>\n”;
  print ”Your Email: <input type=text name=user_email  size=15 value=\”$Email\”><br>\n”;
# добавляем в форму скрытое поле flag, значение которого проверяется
# этой программой: если flag равен одному из двух указанных здесь
# значений, то выполняется подпрограмма добавления пользователя в БД 
  print ”<input type=hidden name=flag value=eng_yes><br>\n”;
  print ”<input type=submit value=\”    Correct    \”>  ”;
  print ”<input type=reset value=\”    Incorrect   \”><br>\n”;
  print ”</FORM>\n”;
  print ”</PRE>\n”;
} else {
#Русский вариант формы
  &Print_Head;
  print ”<H2><b>Регистрация в списке рассылки новостей</b> </H2>\n”;
  print ”<PRE>\n”;
  print ”<FORM METHOD=\”GET\” ACTION=\”/cgi-bin/poster.cgi\”>\n”;
  print ”<input type=hidden name=lang value=russian><br>\n”;
  print ” Ваше имя: <input type=text name=user_name size=15 value=\”$User\”><br>\n”;
  print ”Ваш Email: <input type=text name=user_email size=15 value=\”$Email\”><br>\n”;
# добавляем скрытое поле flag (см. описание выше)
  print ”<input type=hidden name=flag value=rus_yes><br>\n”;
  print ”<input type=submit value=\”Все правильно\”>  ”;
  print ”<input type=reset value=\”Неправильно\”><br>\n”;
  print ”</FORM>\n”;
  print ”</PRE>\n”;
}
 
sub Add_Record { # подпрограмма записи посетителей в БД
   open (UB, ”>>$PathList/$db”) || die (”Error during adding a record $!”);
     print UB join (”::”, ”$User”, ”$Email”), ”\n”;
   close (UB);
}
 
sub Post_News { # подпрограмма рассылки новостей
        #Открыть UB - базу пользователей
        open (UB, ”$PathList/$db”) || die (”Error during
reading file $!”);
       while (<UB>) {
             $line=$_;
            ($User, $Email) = split (/::/, $line);
               #Направить вывод на ”email”
                 open (MAIL, ”|$mail_prog $Email”);
            print MAIL ”From: $From\n”;
                  print MAIL ”Reply-to: $From\n”;
              print MAIL ”Subject: $Title from $Website\n”;
              print MAIL ”\n\n”;
                  print MAIL ”Dear $User,\n\n”;
           #Открываем файл новостей и считываем из него данные
               open (NF, ”$PathNews/$nf”) || die (”Error during reading file $!”);
             while (<NF>) {
               print MAIL ”$_”; # направляем считанные данные на email
             }
           close (NF);
               #
          print MAIL ”\n\nThis script was created by Michael Yevdokimov\n”;
          print MAIL ”Developer’s website: http://www.basicnet.sonnet.ru\n”;
          print MAIL ”\n\n”;
          close (MAIL);                   
       }
        close (UB);
        &Print_Head;
      print ”PRESS <A HREF=\”/$ReturnPage\”>[BACK]</A>
TO RETURN!\n”;
    exit(0);
}
 
sub Check_Email { # подпрограмма проверки правильности
введенного email
  &Err_Msg;
  if ($Email !~ /.+\@.+\..+/) {
      &Print_Head;
        &Err_Msg;
    print ”$ErrMsg\n”;
    #print ”Location: $ENV{‘HTTP_REFERER’}\n\n”;
    exit(0);
  }     
  #exit(0);
}
 
sub Err_Msg { # функция вывода сообщения об ошибке в email
  if ($Lang eq ‘english’) {
    $ErrMsg=”<B>ATTENTION! ERROR OCCURED!</B><P>\n
                 <I>Email: <B>$Email</B>
                 which you have entered is incorrect!</I><P>\n
                 <B>PRESS [BACK] TO RETURN<B>\n”;
    return $ErrMsg;
  } else {
       $ErrMsg=”<B>ВНИМАНИЕ! ВОЗНИКЛА ОШИБКА!</B><P>\n
                 <I>Email: <B>$Email</B>,
                 который вы ввели неправилен!</I><P>\n
                 <B>НАЖМИТЕ [BACK] ДЛЯ ВОЗВРАТА</B>\n”;
    return $ErrMsg;
  }  
}

Домен продается

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Апрель 2024 (1)
Октябрь 2018 (14)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41

Друзья сайта



Случайная цитата

Неизвестный автор:

"Как видно, совершенство достигается не тогда, когда уже нечего прибавить, но когда уже ничего нельзя отнять."

Опрос

Какой браузер Вы используете?

Internet Explorer
Google Chrome
Mozilla Firefox
Netscape Navigator
Maxthon Browser
Opera
Mozilla Suite
SeaMonkey
K-Meleon
Safari
Amaya
Avant Browser
SlimBrowser
Другой...