Глупая проблема с mailmachine.cgi
Кто пользовался, объясните, пожалуйста, что за пароль я должен вводить при первом входе (mailmachine.cgi?admin) ???
Понимаю, что вопрос глупый, но всё же...
mailmachine.cgi
Кто пользовался, объясните, пожалуйста, что за пароль я должен вводить при первом входе (mailmachine.cgi?admin) ???
Понимаю, что вопрос глупый, но всё же...
Найди что присвоено $adminpass
Найди что присвоено $adminpass
Спасибо, именно так я и сделал... Но забыл сказать на форуме, что решил проблему..
Ещё раз, спасибо!
Если е-майлы расположить через запятую и в строчку рассылает на все, но теряется индивидуальность. И опять же на следующую строку не переходит, при этом количество мыл в базе определяет.
Не могу найти в чем причина.
Кто знает подскажите!!!!
Зарание спасибо!
Вы не сталкивались с такой проблемой в mailmachine.cgi : отсылает только на одно мыло расположенное первым по списку в базе.
Если е-майлы расположить через запятую и в строчку рассылает на все, но теряется индивидуальность. И опять же на следующую строку не переходит, при этом количество мыл в базе определяет.
Не могу найти в чем причина.
Кто знает подскажите!!!!
Зарание спасибо!
образец кода выкусить можешь?
образец кода выкусить можешь?
Могу, только ... какой именно, сориентируйте.
Или на мыло весь?
Могу, только ... какой именно, сориентируйте.
Или на мыло весь?
Скрипт целиком сюда залей, а там разберемся ;)=
Скрипт целиком сюда залей, а там разберемся ;)=
Установка -
#
# 1 - Загрузить скрипт в ascii режиме в Вашу cgi-bin
# 2 - Установить атрибут 755 mailmachine.cgi
# 3 - Создайте пустой текстовый файл и назовите его как Вам захочется например want.txt
# Загрузите его в тот же самый каталог. Установите атрибут 777.
# 4 - Создайте каталог в том же месте где находится mailmachine.cgi и назовите его "archives".
# установите атрибут 711.
# 5 - Создайте html форму для подписки на лист рассылки:
#
#
# <form action="/cgi-bin/mailmachine.cgi" method=post>
# <input type=text name="address" size=50>
# <input type=radio name=action value=Подписать checked>
# Подписаться | Удалить <input type=radio name=action value=Удалить>
#
<input type="submit" value="Ввод">
# </form>
#
# 6 - Запустить в браузере - http://www.yourdomain.com/cgi-
# bin/mailmachine.cgi?admin Для администрирования
#
$mailprog = '/usr/sbin/sendmail';
# Установите путь до программы sendmail на Вашем сервере.
$admin_email="хххх\@xxxx";
# Смените на Ваш email сохраните знак \ перед @
$list_name="Новые поступления.";
# Название Вашей рассылки
$adminpass="xxx";
# Административный пароль. Советуем поменять.
$sendto="0";
# Если значение этой переменной 1 то Вы будете получать письмо по электронной
# почте когда кто либо подписывается или отказывается от рассыки.
# Если значение 0 таких писем не будет.
$temp="0";
# Значение 1 - новый участник должен будет подтверждать подписку
# нажимая ссылку в специально посланном ему для этой цели письме.
# Значение 0 участник будет добавлен в список без подтверждения
$remove_notice="0";
# Поставьте значение 1 если хотите дать возможность подписчикам отказаться
# от рассылки прямо из письма. В каждом письме рассылки будет ссылка пройдя по которой
# пользователь удалит свой адрес из списка.
$html = "1";
# Значение 1 HTML версия рассылки, 0 текстовая версия.
$file = "addresses.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.xxx.h16.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=<LIST>;
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=<LIST>;
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=<LIST>;
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="Адрес электронной почты <font color=red>$in{'address'}</font> добавлен в список адресов ожидающих подтверждения. Пожалуйста подтвердите Ваше желание получать почтовую рассылку $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 адрес <font color=red>$in{'address'}</font> Успешно подписан на рассылку $list_name.";
&mailadd;
&message;
exit;
}
}
sub subscribetemp
{
open(LIST,"$file");
if ($lock){
flock(LIST, $lock);
}
@addresses=<LIST>;
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 адрес <font color=red>$in{'address'}</font> был удалён из списка адресов ожидающих подтверждения подписки и добавлен в список постоянных подписчиков на рассылку $list_name.";
&mailadd;
&message;
&unsubscribetemp;
exit;
}
sub bademail
{
$message="Похоже что Вы указали не совсем правильный e-mail адрес. Пожалуйста вернитесь назад и попробуйте ещё раз. Если программа не позволяет добавить Ваш e-mail адрес напишите на e-mail <a href=mailto:$admin_email> $admin_email</a> and I'll и ваш адрес будет добавлен в рассылку вручную. Извините за доставленные
неудобства.";&message;
exit;
}
sub banned_message
{
$message="Жаль, но Ваш адрес <font color=red>$in{'address'}</font> по каким то причинам был добавлен в чёрный список, и Вы не имеете право подписаться на данную рассылку.";
&message;
exit;
}
sub already_subscribed
{
$message="Этот адрес <font color=red>$in{'address'}</font> уже подписан на
рассылку!";&message;
exit;
}
sub unsubscribe
{
open(LIST,"$file");
if ($lock){
flock(LIST, $lock);
}
@addresses=<LIST>;
close(LIST);$x=0;
foreach $member(@addresses)
{
&clean;
if ($in{'address'} eq $member){&deletemember}
$x++;
}
¬_found;
}
sub unsubscribetemp
{
open(LIST,"temp.txt");
if ($lock){
flock(LIST, $lock);
}
@addresses=<LIST>;
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="<form action=mailmachine.cgi method=post> Пароль: <input type=password name=adminpass>
<input type=submit value=Ввести><input type=reset value=Очистить></FORM>";
&message;
exit;
}
sub clean
{
chomp($member);
$member=~ s/^\s+//;
$member=~ s/\s+$//;
}
sub not_found
{
$message="Адрес <font color=red>$in{'address'}</font>
не может быть удалён и з рассылки так как он на неё и не подписан!";
&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="<font color=red>$in{'address'}</font> Был успешно удален из рассылки $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 <<to_the_end;
Это письмо просто подтверждает подписку на рассылку $list_name.
to_the_end
close (MAIL);
продолжение следует:
if ($sendto eq "1") {
open (MAIL, "|$mailprog -t") || die "Can't open $mailprog!\n";
print MAIL "From: $admin_email\n";
print MAIL "To: $admin_email\n";
print MAIL "Subject: Подтверждение подписки\n\n";
print MAIL <<to_the_end;
$in{'address'} был подписан на рассылку $list_name.
to_the_end
close (MAIL);
}
}
sub mailtemp{
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 <<to_the_end;
Для того что бы подтвердить подписку на почтовую рассылку $list_name Вы должны нажать на ссылку расположенную внизу этого письма. Повторное нажатие на эту же ссылку удалит Ваш адрес из списка рассылки. Если Вы не подписывались на нашу рассылку это значит что кто то с IP адресом $ENV{'REMOTE_ADDR'} пытался сделать это за Вас. В этом случае Вам не надо нажимать на нижеприведённую ссылку и больше никаких писем от нас Вы получать не будете.
http://$url$script_url?$in{'address'}
to_the_end
close (MAIL);
}
sub mailun{
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 <<to_the_end;
Вы были удалены из списка рассылки $list_name. Если Вы захотите заново подписаться на нашу рассылку
можете сделать это в любое время с нашего сайта.
to_the_end
close (MAIL);
if ($sendto eq "1") {
open (MAIL, "|$mailprog -t") || die "Can't open $mailprog!\n";
print MAIL "From: $admin_email\n";
print MAIL "To: $admin_email\n";
print MAIL "Subject: Уведомление!\n\n";
print MAIL <<to_the_end;
$in{'address'} удалён из списка рассылки $list_name.
to_the_end
close (MAIL);
}
}
sub adminform
{
$number=0;
open(LIST,"$file");
if ($lock){
flock(LIST, $lock);
}
@addresses=<LIST>;
print LIST "$number\n";
close(LIST);
$number = push(@addresses);
print "<html><title>$list_name</title><body bgcolor=#d2d2d2>
<center><pre>
</pre>
<table width=500>
<td align=center>
<font face=arial>
<font face=arial size=+1 color=blue>$list_name</font>
В настоящее время <font color=red>$number</font> e-mail адресов в списке.<form action=mailmachine.cgi method=post>
Архив: <select name=archives>";
open(LIST,"archives/log.txt");
if ($lock){
flock(LIST, $lock);
}
@entries=<LIST>;
close(LIST);
@entries = reverse(@entries);
foreach $entry(@entries)
{
print "<option>$entry\n";
$x++;
}
print "</select><input type=submit name=action value=Загрузить></form><form action=mailmachine.cgi method=post>Тема: <input type=text name=subject>
Сообщение:
<textarea name=message rows=12 cols=50></textarea>
<input type=submit name=action value=Отправить><input type=reset value=Очистить name=></FORM>
<form action=mailmachine.cgi method=post><input type=text name=address> <input type=submit name=action value=Подписать>
<TABLE><TR><TD><form action=mailmachine.cgi method=post><select name=address size=6>";
@addresses = sort(@addresses);
foreach $member(@addresses)
{
print "<option>$member";
$x++;
}
print "</select></TD></TR><TR><TD><CENTER><input type=submit name=action value=Удалить></CENTER></TD></TR></TABLE></form></form>";
# 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 "
<font face=arial size=-1>Mail Machine v3.975
Free from <A HREF=\"http://www.mikesworld.net\">Mike's World</A></font>
Перевод <a href=\"http://www.freyn.agava.ru/index.htm\">ВизиТ</A>
</td>
</table>
</body></html>";
}
sub load
{
$number=0;
open(LIST,"$file");
if ($lock){
flock(LIST, $lock);
}
@addresses=<LIST>;
print LIST "$number\n";
close(LIST);
$number = push(@addresses);
print "<html><title>$list_name</title><body bgcolor=#d2d2d2>
<center><pre>
</pre>
<table width=500>
<td align=center>
<font face=arial>
<font face=arial size=+1 color=blue>$list_name</font>
В настоящее время <font color=red>$number</font> e-mail адресов имеются в списке.<form action=mailmachine.cgi method=post>
Архив: <select name=archives>";
open(LIST,"archives/log.txt");
if ($lock){
flock(LIST, $lock);
}
@entries=<LIST>;
close(LIST);
@entries = reverse(@entries);
foreach $entry(@entries)
{
print "<option>$entry\n";
$x++;
}
print "</select><input type=submit name=action value=Загрузить></form><form action=mailmachine.cgi method=post>Тема: <input type=text name=subject value=\"";
open(FILE,"archives/$in{'archives'}.txt");
while (<FILE>) {
($message, $subject) = split /::/;
if($subject ne "")
{
print "$subject\"";
}
}
close(FILE);
print ">
Сообщение:
<textarea name=message rows=12 cols=50>";
open(FILE,"archives/$in{'archives'}.txt");
while (<FILE>) {
($message, $subject) = split /::/;
print "$message";
}
close(FILE);
print "</textarea>
<input type=submit name=action value=Отправить><input type=reset value=Очистить name=></FORM>
<form action=mailmachine.cgi method=post><input type=text name=address> <input type=submit name=action value=Подписать>
<TABLE><TR><TD><form action=mailmachine.cgi method=post><select name=address size=6>";
@addresses = sort(@addresses);
foreach $member(@addresses)
{
print "<option>$member";
$x++;
}
print "</select></TD></TR><TR><TD><CENTER><input type=submit name=action value=Удалить></CENTER></TD></TR></TABLE></form></form>";
# 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 "
<font face=arial size=-1>Mail Machine v3.975
Free from <A HREF=\"http://www.mikesworld.net\">Mike's World</A></font>
Перевод <a href=\"http://www.freyn.agava.ru/index.htm\">ВизиТ</A>
</td>
</table>
</body></html>";
exit;
}
sub send
{
$pid = fork();
$pid;
if ($pid) {
&sendcomplete;
&archive;
exit(0);
}
else {
close (STDOUT);
open(LIST,"$file");
if ($lock){
flock(LIST, $lock);
}
@addresses=<LIST>;
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 <<to_the_end;
---------------------------------------------------------------------
Если Вы больше не хотите получать нашу рассылку просто нажмите на ссылку ниже чтобы удалить свой адрес из списка рассылки
$list_name.
http://$url$script_url?$member
---------------------------------------------------------------------
to_the_end
}
else {
print MAIL <<to_the_end;
---------------------------------------------------------------------
Нажмите на ссылку ниже чтобы удалить свой адрес из списка рассылки
$list_name.
http://$url$script_url?$member
---------------------------------------------------------------------
to_the_end
}
}
close (MAIL);
}
&confirmation;
exit;
}
}
sub archive
{
open(LIST, ">>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 <<to_the_end;
Поздравляю! Рассылка произведена успешно. Было разослано следующее сообщение:
$in{'message'}
to_the_end
close (MAIL);
}
else {
print MAIL <<to_the_end;
Поздравляю! Рассылка произведена успешно. Было разослано следующее сообщение:
:
$in{'message'}
to_the_end
close (MAIL);
}
}
sub message
{
print qq~
<html><title>$list_name</title><body bgcolor=#d2d2d2>
<center><pre>
</pre>
<table width=500>
<td align=center>
<font face=arial>
<font face=arial size=+1 color=blue>$list_name</font>
$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 "
<font face=arial size=-1>Mail Machine v3.975
Free from <A HREF=\"http://www.mikesworld.net\">Mike's World</A></font>
Перевод <a href=\"http://www.freyn.agava.ru/index.htm\">ВизиТ</A>
</td>
</table>
</body></html>";
}
Вы не сталкивались с такой проблемой в mailmachine.cgi : отсылает только на одно мыло расположенное первым по списку в базе.
Если е-майлы расположить через запятую и в строчку рассылает на все, но теряется индивидуальность. И опять же на следующую строку не переходит, при этом количество мыл в базе определяет.
Не могу найти в чем причина.
Кто знает подскажите!!!!
Зарание спасибо!
Ну, млин, прикрепить файлец к посту нада было, а не так как ты сделал ;)))
Короче, в файле список адресов храниться таким макаром
[email]email2@mail.com[/email]
[email]email3@mail.com[/email]
[email]email4@mail.com[/email]
т.е в одной строке один адрес. Тогда письма будут отсылаться так, как тебе хочется.
Но на самом деле, код этого скрипта аюсолютное зло. И если тебе пофик как будет вести себя машина, запускающая этот скрипт, то пофик. если нет, то стоит поискать другие, более удачные решения ;)))
Ну, млин, прикрепить файлец к посту нада было, а не так как ты сделал ;)))
Короче, в файле список адресов храниться таким макаром
[email]email2@mail.com[/email]
[email]email3@mail.com[/email]
[email]email4@mail.com[/email]
т.е в одной строке один адрес. Тогда письма будут отсылаться так, как тебе хочется.
Но на самом деле, код этого скрипта аюсолютное зло. И если тебе пофик как будет вести себя машина, запускающая этот скрипт, то пофик. если нет, то стоит поискать другие, более удачные решения ;)))
Проблема как раз в том что они у меня (е-майлы) расположены в списке именно таким образом...
На счет других более удачных решений не подскажешь?
Проблема как раз в том что они у меня (е-майлы) расположены в списке именно таким образом...
На счет других более удачных решений не подскажешь?
Тогда, взгляни по дебагером как работает финкция send(), особенно в той части где написан цикл по всем адресам списка.
другие решения
siesta
http://www.perl.com/pub/a/2004/02/05/siesta.html
http://siesta.unixbeard.net/
mailman
http://www.gnu.org/software/mailman/