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

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

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

 

или


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

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

Листинг 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 ■

ATTENTION! ERROR OCCURED!

\n■; print ■PRESS [BACK] 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 here to return...\n■; exit(0); } else { if ($Flag eq ▒rus_yes▓) { &Check_Email; &Add_Record; &Print_Head; print ■Ваши данные занесены в базу данных

\n■; print ■Нажмите здесь для возврата...\n■; exit(0); } else { } } # вывести форму подтверждения правильности введенной информации if ($db eq ▒userbase.eng▓) { #Английский вариант формы &Print_Head; print ■

News List Registration

\n■; print ■
\n■;
  print ■
\n■; print ■
\n■; print ■ Your Name:
\n■; print ■Your Email:
\n■; # добавляем в форму скрытое поле flag, значение которого проверяется # этой программой: если flag равен одному из двух указанных здесь # значений, то выполняется подпрограмма добавления пользователя в БД print ■
\n■; print ■ ■; print ■
\n■; print ■
\n■; print ■
\n■; } else { #Русский вариант формы &Print_Head; print ■

Регистрация в списке рассылки новостей

\n■; print ■
\n■;
  print ■
\n■; print ■
\n■; print ■ Ваше имя:
\n■; print ■Ваш Email:
\n■; # добавляем скрытое поле flag (см. описание выше) print ■
\n■; print ■ ■; print ■
\n■; print ■
\n■; print ■
\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 () { $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 () { 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 [BACK] 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=■ATTENTION! ERROR OCCURED!

\n Email: $Email which you have entered is incorrect!

\n PRESS [BACK] TO RETURN\n■; return $ErrMsg; } else { $ErrMsg=■ВНИМАНИЕ! ВОЗНИКЛА ОШИБКА!

\n Email: $Email, который вы ввели неправилен!

\n НАЖМИТЕ [BACK] ДЛЯ ВОЗВРАТА\n■; return $ErrMsg; } }

Назад | Содержание | Вперед