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 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Март 2017 (1)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)
Ноябрь 2015 (1)

Карта сайта: 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

Друзья сайта

Хотите продать свой сайт?
- Мы быстро и удобно для Вас сможем его купить:
  • Заявка на продажу сайта
  • Раcсматриваем цены на каждый сайт в индивидуальном порядке.

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

    Olav Mjelde:

    "Они больше не делают баги, как Банни (Bugs Bunny)."

    Опрос

    Ваша ОС?

    Windows XP
    Windows 7
    др. версия Windows
    Linux
    др. ОС