#!/usr/bin/perl $mailprog = '/usr/sbin/sendmail'; # Установите путь до программы sendmail на Вашем сервере. $admin_email="freyn\alex25_06@mail.ru"; # Смените на Ваш email сохраните знак \ перед @ $list_name="Заработак."; # Название Вашей рассылки $adminpass="250486"; # Административный пароль. Советуем поменять. $sendto="1"; # Если значение этой переменной 1 то Вы будете получать письмо по электронной # почте когда кто либо подписывается или отказывается от рассыки. # Если значение 0 таких писем не будет. $temp="0"; # Значение 1 - новый участник должен будет подтверждать подписку # нажимая ссылку в специально посланном ему для этой цели письме. # Значение 0 участник будет добавлен в список без подтверждения $remove_notice="0"; # Поставьте значение 1 если хотите дать возможность подписчикам отказаться # от рассылки прямо из письма. В каждом письме рассылки будет ссылка пройдя по которой # пользователь удалит свой адрес из списка. $html = "1"; # Значение 1 HTML версия рассылки, 0 текстовая версия. $file = "adds.txt"; # Файл в котором хранятся все адреса подписчиков. Лучше переименовать его для безопасности. @bannedaddresses = ('john@johndoe.com','joe@joedoe.com'); # Адреса которые не смогут добавить себя в список рассылки (банлист) $lock = "2"; # оставьте значение 2 если сервер позволяет использовать # блокировку файла. Иначе удалите эту строчку. @months = ('Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'); @days = ('Воскресенье','Понедельник','Вторник','Среда','Четверг','Пятница','Суббота'); ($mday,$mon,$year,$wday) = (localtime(time))[3,4,5,6]; $year += 1900; $date = "$months[$mon] $mday, $year"; # URL Вашего сайта без HTTP:// $url = 'www.freyn.agava.ru'; $script_url = $ENV{'SCRIPT_NAME'}; print "Content-type:text/html\n\n"; ✓ read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $in{$name} = $value; } if ($in{'action'} eq "Подписать") {&subscribe} if ($in{'action'} eq "Удалить") {&unsubscribe} if ($in{'action'} eq "Отправить") {&send} if ($in{'action'} eq "Загрузить") {&load} if ($in{'adminpass'} ne "$adminpass") {&adminerror} if ($in{'adminpass'} eq "$adminpass") {&adminform} exit; sub check { open(LIST,"$file"); if ($lock){ flock(LIST, $lock); } @addresses=; close(LIST); foreach $member(@addresses) { chomp($member); $in{'address'} = "$ENV{'QUERY_STRING'}"; if ($in{'address'} eq $member){&unsubscribe} } open(LIST,"temp.txt"); if ($lock){ flock(LIST, $lock); } @addresses=; close(LIST); foreach $tempmember(@addresses) { chomp($tempmember); $in{'address'} = "$ENV{'QUERY_STRING'}"; if ($in{'address'} eq $tempmember){&subscribetemp} } if("admin" eq $ENV{'QUERY_STRING'}){ &admin } } sub subscribe { open(LIST,"$file"); if ($lock){ flock(LIST, $lock); } @addresses=; close(LIST); if ($in{'address'}!~ /.*\@.*\..*/){&bademail} foreach $bannedaddress(@bannedaddresses) { if ($in{'address'} eq $bannedaddress){&banned_message} } foreach $member(@addresses) { chomp($member); if ($in{'address'} eq $member){&already_subscribed} } if ($temp eq "1") { push (@addresses,$in{'address'}); open(LIST,">>temp.txt"); if ($lock){ flock(LIST, $lock); } print LIST "$in{'address'}\n"; close(LIST); $message="Адрес электронной почты $in{'address'} добавлен в список адресов ожидающих подтверждения. Пожалуйста подтвердите Ваше желание получать почтовую рассылку $list_name . Для подтверждения подписки Вам надо щёлкнуть по ссылке в письме которое мы Вам только что отправили. Письмо должно Вам прийти через несколько минут."; &mailtemp; &message; exit; } else { push (@addresses,$in{'address'}); open(LIST,">>$file"); if ($lock){ flock(LIST, $lock); } print LIST "$in{'address'}\n"; close(LIST); $message="Этот e-mail адрес $in{'address'} Успешно подписан на рассылку $list_name."; &mailadd; &message; exit; } } sub subscribetemp { open(LIST,"$file"); if ($lock){ flock(LIST, $lock); } @addresses=; close(LIST); if ($in{'address'}!~ /.*\@.*\..*/){&bademail} foreach $bannedaddress(@bannedaddresses) { if ($in{'address'} eq $bannedaddress){&banned_message} } push (@addresses,$in{'address'}); open(LIST,">>$file"); if ($lock){ flock(LIST, $lock); } print LIST "$in{'address'}\n"; close(LIST); $message="Этот e-mail адрес $in{'address'} был удалён из списка адресов ожидающих подтверждения подписки и добавлен в список постоянных подписчиков на рассылку $list_name."; &mailadd; &message; &unsubscribetemp; exit; } sub bademail { $message="Похоже что Вы указали не совсем правильный e-mail адрес. Пожалуйста вернитесь назад и попробуйте ещё раз. Если программа не позволяет добавить Ваш e-mail адрес напишите на e-mail $admin_email and I'll и ваш адрес будет добавлен в рассылку вручную. Извините за доставленные неудобства.";&message; exit; } sub banned_message { $message="Жаль, но Ваш адрес $in{'address'} по каким то причинам был добавлен в чёрный список, и Вы не имеете право подписаться на данную рассылку."; &message; exit; } sub already_subscribed { $message="Этот адрес $in{'address'} уже подписан на рассылку!";&message; exit; } sub unsubscribe { open(LIST,"$file"); if ($lock){ flock(LIST, $lock); } @addresses=; close(LIST);$x=0; foreach $member(@addresses) { &clean; if ($in{'address'} eq $member){&deletemember} $x++; } &not_found; } sub unsubscribetemp { open(LIST,"temp.txt"); if ($lock){ flock(LIST, $lock); } @addresses=; close(LIST);$x=0; foreach $member(@addresses) { &clean; if ($in{'address'} eq $member){@addresses[$x]=""; open(LIST,">temp.txt"); if ($lock){ flock(LIST, $lock); } foreach $member(@addresses) { &clean; unless($member eq "") {print LIST "$member\n";} }} $x++; } exit; } sub adminerror { $message="Похоже Вы не имеете прав администратора в данной рассылке, или просто ошиблись вводя свой пароль. Вернитесь назад и попробуйте ещё раз."; &message; exit; } sub admin { $message="
Пароль:

"; &message; exit; } sub clean { chomp($member); $member=~ s/^\s+//; $member=~ s/\s+$//; } sub not_found { $message="Адрес $in{'address'} не может быть удалён и з рассылки так как он на неё и не подписан!"; &message; exit; } sub deletemember { @addresses[$x]=""; open(LIST,">$file"); if ($lock){ flock(LIST, $lock); } foreach $member(@addresses) { &clean; unless($member eq "") {print LIST "$member\n";} } $message="$in{'address'} Был успешно удален из рассылки $list_name."; &mailun; &message; exit; } sub mailadd{ open (MAIL, "|$mailprog -t") || die "Can't open $mailprog!\n"; print MAIL "From: $admin_email\n"; print MAIL "To: $in{'address'}\n"; print MAIL "Subject: Подтверждение подписки!\n\n"; print MAIL <<<<<; print LIST "$number\n"; close(LIST); $number = push(@addresses); print "

$list_name

В настоящее время $number e-mail адресов в списке.

Архив:
Тема:

Сообщение:




"; # Removing or altering the code below will void your acceptance of the # terms and conditions and consequently you will no longer be able to # use the program. Please contact me if you have any questions regarding # this. print "



Mail Machine v3.975
Free from Mike's World

Перевод ВизиТ
"; } sub load { $number=0; open(LIST,"$file"); if ($lock){ flock(LIST, $lock); } @addresses=; print LIST "$number\n"; close(LIST); $number = push(@addresses); print "

$list_name

В настоящее время $number e-mail адресов имеются в списке.

Архив:
Тема: ) { ($message, $subject) = split /::/; if($subject ne "") { print "$subject\""; } } close(FILE); print ">

Сообщение:




"; # Removing or altering the code below will void your acceptance of the # terms and conditions and consequently you will no longer be able to # use the program. Please contact me if you have any questions regarding # this. print "



Mail Machine v3.975
Free from Mike's World

Перевод ВизиТ
"; exit; } sub send { $pid = fork(); $pid; if ($pid) { &sendcomplete; &archive; exit(0); } else { close (STDOUT); open(LIST,"$file"); if ($lock){ flock(LIST, $lock); } @addresses=; close(LIST); foreach $member(@addresses) { chomp($member); open (MAIL, "|$mailprog -t") || die "Can't open $mailprog!\n"; if ($html eq "1") { print MAIL "Content-type:text/html\n"; } print MAIL "From: $admin_email\n"; print MAIL "To: $member\n"; print MAIL "Subject: $in{'subject'}\n\n"; print MAIL "$in{'message'}\n\n"; if ($remove_notice eq "1") { if ($html eq "1") { print MAIL <

---------------------------------------------------------------------
Если Вы больше не хотите получать нашу рассылку просто нажмите на ссылку ниже чтобы удалить свой адрес из списка рассылки $list_name.

http://$url$script_url?$member
--------------------------------------------------------------------- to_the_end } else { print MAIL <>archives/log.txt"); if ($lock){ flock(LIST, $lock); } print LIST "$date - $in{'subject'}\n"; close(LIST); $message = "$in{'message'}"; $subject = "$in{'subject'}"; $new_entry = $message . "::" . $subject; open(FILE, ">>archives/$date - $in{'subject'}.txt"); if ($lock){ flock(FILE, $lock); } print FILE "$new_entry\n"; close(FILE); } sub sendcomplete { $message="Поздравляю. Отправка рассылки адресатам была начата. После завершения рассылки Вы получите подтверждение."; &message; } sub confirmation { open (MAIL, "|$mailprog -t") || die "Can't open $mailprog!\n"; if ($html eq "1") { print MAIL "Content-type:text/html\n"; } print MAIL "From: $admin_email\n"; print MAIL "To: $admin_email\n"; print MAIL "Subject: Поздравляю!\n\n"; if ($html eq "1") { print MAIL <

$in{'message'} to_the_end close (MAIL); } else { print MAIL <

: $in{'message'} to_the_end close (MAIL); } } sub message { print qq~

$list_name

$message~; # Removing or altering the code below will void your acceptance of the # terms and conditions and consequently you will no longer be able to # use the program. Please contact me if you have any questions regarding # this. print "



Mail Machine v3.975
Free from Mike's World

Перевод ВизиТ
"; }