Приветствую. У меня вот такая трабла: мой сайт расположен на Фатале (Fatal.ru). Мне нужно установить рассылку новостей постоянным посетителям, просто чтобы сообщать об обновлении на сайте раз в несколько дней. Но на Фатале установлено ограничение для работы сендмейла в 1 минуту. Скрипт у меня есть, причем рабочий. Если в базе указан только один адрес, письмо свободно отправляется. Если же больше одного, получает отправленное только первый адрес, а все последующие нет, хотя указывается, что "успешно отправлено *** писем".
А вопрос в следующем: был у меня другой скрипт, но он на пхп (на фатале плохо приживается, и вообще скрипт глючный). И там была возможность задавать ограничение на отправку писем, т.е. с интервалом в столько-то секунд.
Вопрос: можно ли подобное прописать в моем скрипте?ЗЫ: сразу говорю, никакого программерского образования не имею, и со скриптами работаю не так давно, и знаю только основы, но быстро учусь... =))
__________________________
http://script.woweb.ru/index.htm/id/1064206756 - глючный скрипт на пхп с возможностью устанавливать интервал отправки;
http://script.woweb.ru/index.htm/id/1023464395 - неглючный скрипт на перле без оной возможности;
>Приветствую. У меня вот такая трабла: мой сайт расположен на Фатале (Fatal.ru).
>Мне нужно установить рассылку новостей постоянным посетителям, просто чтобы сообщать об
>обновлении на сайте раз в несколько дней. Но на Фатале установлено
>ограничение для работы сендмейла в 1 минуту. Скрипт у меня есть,
>причем рабочий.
Лучше поставь его на cron
>Лучше поставь его на cronЭмм, вопрос может быть довольно глупый, но что такое этот корн? Ну, если в двух словах. И где о нем можно почитать?..
>Эмм, вопрос может быть довольно глупый, но что такое этот корн? Ну,
>если в двух словах. И где о нем можно почитать?..Крон - это запуск твоих скриптов по расписанию.
Указываешь время и название программы, которую надо запускать - и все.
Только на бесплатном хостинге такое вряд-ли поддерживается.
У нас есть, но это не бесплатный хостинг.
>>Эмм, вопрос может быть довольно глупый, но что такое этот корн? Ну,
>>если в двух словах. И где о нем можно почитать?..
>
>Крон - это запуск твоих скриптов по расписанию.
>Указываешь время и название программы, которую надо запускать - и все.
>Только на бесплатном хостинге такое вряд-ли поддерживается.
>У нас есть, но это не бесплатный хостинг.
Если доступа к крону нет - то тогда можешь попытаться изменить скрипт, это в принципе не сложно, поставь в самом начале запись в файл времени старта скрипта - и при каждой процедуре отправки письма следующему адресату - проверяй этот файл и сравнивай с текущем временем. Но если у тебя программерских знаний нет - то тут будет сложно.
>Если доступа к крону нет - то тогда можешь попытаться изменить скрипт,
>это в принципе не сложно, поставь в самом начале запись в
>файл времени старта скрипта - и при каждой процедуре отправки письма
>следующему адресату - проверяй этот файл и сравнивай с текущем временем.
>Но если у тебя программерских знаний нет - то тут будет
>сложно.Хмм... Оных знаний у меня и правда нет... Но надо же когда-то учиться! )) Если бы кто подсказал, какие именно команды задают запись времени...
А вот может получится как-то использовать вот такой отрывок из другого скрипта на том же перле?
---------------------------------
# Does your host require a sleep between blocks of e-mails sent?
$usesleep = 'yes';# How many e-mails are sent in one block?
$blocksize = '100';# How long to sleep between blocks (in seconds)?
$sleeptime = '70';
....----------------------------------
.....
print MAIL "All Rights Reserved.\n"; close (MAIL);
if ($usesleep !~ 'n' && $sendcnt eq $blocksize) {
sleep $sleeptime;
$sendcnt = 0;
}
}
}
}if (!$FORM{'sendmessage'}) {....
------------------------------------------Это было в другом скрипте, который как-раз работает с отсылкой писем с определенным интервалом времени, но он, к сожалению, не работает на моем хосте по невыясненным причинам, и вообще не имеет нужных функций.
Вот только незнаю, как именно это применить и какой именно кусок от вышеизложенного и после чего нужно поставить в моем скрипте.
А это (по-моему дилетанскому мнению) кусок из моего скрипта, выполняющий ту же функцию:
------------------------------------------------
#Собственно рассылка
my $sentok=0; my $senterr=0;
my $boundary="--Boundary_$$.pvdlab.net";
open (LOG,">logsent.txt");
print LOG "-----------Начало отправки ----------\n";
while (<ABOOK>) {
chomp; s/\r+$//;
next if !$_;
($email, $charset, $mode)=split(/\x01/, $_, 3);
$charset=$defcharset if (!$charset);
$mode=$defmode if (!$mode);$flg=0;
open (MZ,$MAIL_PROGRAM) or $flg=1;
if ($flg==0)
{ print MZ "To: $email\n";
print MZ "From: $from{$charset}\n";
print MZ "Subject: $subj{$charset}\n";
print MZ "MIME-Version: 1.0\n";
if ($attflg==1) {
print MZ "Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
print MZ "\n";
print MZ "This is a multi-part message in MIME format.\n";
print MZ "\n";
#текст письма
print MZ "--$boundary\n";print MZ "Content-Type: $chset{$mode}\; charset=\"$chset{$charset}\"\n";
print MZ "Content-Transfer-Encoding: 8bit\n\n";
print MZ $msg{"$charset\_$mode"};
print MZ "\n\n";my $i=1; my $maxfiles=10;
while ($i<$maxfiles+1) {
if ($in{"srcfile$i"}) {#Аттачмент
print MZ "--$boundary\n";
print MZ "Content-Type: ", $in{"ctfile$i"}, "; name=\"", $in{"file$i"}, "\"\n";
print MZ "Content-Transfer-Encoding: Base64\n";
print MZ "Content-Disposition: attachment; filename=\"", $in{"file$i"}, "\"\n";
print MZ "\n";
print MZ $in{"srcfile$i"};
print MZ "\n\n";}
$i++;
}
#конец письма
print MZ "--$boundary--\n";}
else {
print MZ "Content-Type: $chset{$mode}\; charset=\"$chset{$charset}\"\n";
print MZ "Content-Transfer-Encoding: 8bit\n\n";
print MZ $msg{"$charset\_$mode"};
print MZ "\n\n";
}
close (MZ); $sentok++;
print LOG "$email - Ok\n";
} else {$senterr++; print LOG "---- Ошибка отправки $email \n";}
}
close(ABOOK);
print LOG "-----------Конец отправки ----------\n";
#Собственно рассылка
my $sentok=0; my $senterr=0;
my $boundary="--Boundary_$$.pvdlab.net";
open (LOG,">logsent.txt");
print LOG "-----------Начало отправки ----------\n";
while (<ABOOK>) {
chomp; s/\r+$//;
next if !$_;
($email, $charset, $mode)=split(/\x01/, $_, 3);
$charset=$defcharset if (!$charset);
$mode=$defmode if (!$mode);$flg=0;
open (MZ,$MAIL_PROGRAM) or $flg=1;
if ($flg==0)
{ print MZ "To: $email\n";
print MZ "From: $from{$charset}\n";
print MZ "Subject: $subj{$charset}\n";
print MZ "MIME-Version: 1.0\n";
if ($attflg==1) {
print MZ "Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
print MZ "\n";
print MZ "This is a multi-part message in MIME format.\n";
print MZ "\n";
#текст письма
print MZ "--$boundary\n";print MZ "Content-Type: $chset{$mode}\; charset=\"$chset{$charset}\"\n";
print MZ "Content-Transfer-Encoding: 8bit\n\n";
print MZ $msg{"$charset\_$mode"};
print MZ "\n\n";my $i=1; my $maxfiles=10;
while ($i<$maxfiles+1) {
if ($in{"srcfile$i"}) {#Аттачмент
print MZ "--$boundary\n";
print MZ "Content-Type: ", $in{"ctfile$i"}, "; name=\"", $in{"file$i"}, "\"\n";
print MZ "Content-Transfer-Encoding: Base64\n";
print MZ "Content-Disposition: attachment; filename=\"", $in{"file$i"}, "\"\n";
print MZ "\n";
print MZ $in{"srcfile$i"};
print MZ "\n\n";}
$i++;
}
#конец письма
print MZ "--$boundary--\n";}
else {
print MZ "Content-Type: $chset{$mode}\; charset=\"$chset{$charset}\"\n";
print MZ "Content-Transfer-Encoding: 8bit\n\n";
print MZ $msg{"$charset\_$mode"};
print MZ "\n\n";
}
close (MZ); $sentok++;
print LOG "$email - Ok\n";
} else {$senterr++; print LOG "---- Ошибка отправки $email \n";}
}
close(ABOOK);
print LOG "-----------Конец отправки ----------\n";-----------------------------------------------------------
Вот я думаю, как бы пристроить тот верхний кусок в нижний скрипт отправки... (мена постоянно путают эти скобки "{}" - не врубаюсь, что и где они ограничивают, и где конец, а где начало... *_*) При попытке сделать это методом "пальцем в небо" выдавались ошибки...
ЗЫ: Извиняюсь за выкладывание сюда таких огромных кусков скрипта, но самостоятельно мне с этим не разобраться... *_*
>
>А это (по-моему дилетанскому мнению) кусок из моего скрипта, выполняющий ту же
>функцию:
>------------------------------------------------
>#Собственно рассылка
>my $sentok=0; my $senterr=0;
>my $boundary="--Boundary_$$.pvdlab.net";
>open (LOG,">logsent.txt");
>print LOG "-----------Начало отправки ----------\n";
>while (<ABOOK>) {
> chomp; s/\r+$//;
> next if !$_;
> ($email, $charset, $mode)=split(/\x01/, $_, 3);
> $charset=$defcharset if (!$charset);
> $mode=$defmode if (!$mode);
>
> обрезал
Вот сюда вставь:while (<ABOOK>) {
chomp; s/\r+$//;
next if !$_;
sleep($timeout) if $timeout;# вот эту строкуА в самое начало скрипта (там где у тебя:
>#Собственно рассылка
>my $sentok=0; my $senterr=0; my $timeout=0;# вот этоЕсли $timeout=0, то задержки не будет - если чему-то равно - то будет задержка на это "чего-то": к примеру для 100 секунд поставь $timeout=100; и т.п
>Вот сюда вставь:
>
>while (<ABOOK>) {
>chomp; s/\r+$//;
>next if !$_;
>sleep($timeout) if $timeout;# вот эту строку
>
>А в самое начало скрипта (там где у тебя:
>>#Собственно рассылка
>>my $sentok=0; my $senterr=0; my $timeout=0;# вот это
>
>Если $timeout=0, то задержки не будет - если чему-то равно - то
>будет задержка на это "чего-то": к примеру для 100 секунд поставь
>$timeout=100; и т.п
Эхх, а по началу все так хорошо шло... Даже страница с загрузкой рассылки запустилась. )) Но... после двух минут ожидания при отправки "тест" на два адреса браузер выдает ошибку 500 - невозможно отобразить страницу из-за внутренней ошибки сервера.. :(
Видимо, у меня кривые руки... Или руки нормальные, но сервер кривой... *_*
>Эхх, а по началу все так хорошо шло... Даже страница с загрузкой
>рассылки запустилась. )) Но... после двух минут ожидания при отправки "тест"
>на два адреса браузер выдает ошибку 500 - невозможно отобразить страницу
>из-за внутренней ошибки сервера.. :(
>Видимо, у меня кривые руки... Или руки нормальные, но сервер кривой... *_*
>
Хмм, удивительный факт: письма-таки дошли! =)) Хотя всего три из четырех, но это все-таки лучше, чем ничего! )) Значит скриптик-то работает, но немножко глючно - не отображает страницу, которая должна вывестись после отправки. Ну, где статистика приводится об отправке и т.п. Да в общем-то и черт бы с ней, лишь бы письма отсылались! )) Но это был тест с двумя адресами, и не знаю, как будет реагировать браузер, если будет все 85 подписчиков... ))Но, в любом случае, огромнейшее безграничное мерси за подсказку! ;)) Оказывается, есть еще на свете люди, которым не лень помогать ламерам! ))
>>Вот сюда вставь:
>>
>>while (<ABOOK>) {
>>chomp; s/\r+$//;
>>next if !$_;
>>sleep($timeout) if $timeout;# вот эту строку
>>
>>А в самое начало скрипта (там где у тебя:
>>>#Собственно рассылка
>>>my $sentok=0; my $senterr=0; my $timeout=0;# вот это
>>
>>Если $timeout=0, то задержки не будет - если чему-то равно - то
>>будет задержка на это "чего-то": к примеру для 100 секунд поставь
>>$timeout=100; и т.п
>
>
>Эхх, а по началу все так хорошо шло... Даже страница с загрузкой
>рассылки запустилась. )) Но... после двух минут ожидания при отправки "тест"
>на два адреса браузер выдает ошибку 500 - невозможно отобразить страницу
>из-за внутренней ошибки сервера.. :(
>Видимо, у меня кривые руки... Или руки нормальные, но сервер кривой... *_*
>
Поставь таймаут поменьше, просто скорее всего на хостинге стоит ограничение по времени на работу скрипта, в среднем это 30 минут -но на халяве может быть и меньше.
>Поставь таймаут поменьше, просто скорее всего на хостинге стоит ограничение по времени
>на работу скрипта, в среднем это 30 минут -но на халяве
>может быть и меньше.какие 30 минут? вы что? 30 секунд - минута!!! и то это много!!!
для того, что-бы это ограничение обойти надо после каждого таймаута запускать НОВЫЙ процесс, а старый - убивать.
>>Поставь таймаут поменьше, просто скорее всего на хостинге стоит ограничение по времени
>>на работу скрипта, в среднем это 30 минут -но на халяве
>>может быть и меньше.
>
>какие 30 минут? вы что? 30 секунд - минута!!! и то это
>много!!!
>для того, что-бы это ограничение обойти надо после каждого таймаута запускать НОВЫЙ
>процесс, а старый - убивать.
Может быть -я просто слышал что ограничение - но сам как-то не когда не сталкивался с этим
>>Поставь таймаут поменьше, просто скорее всего на хостинге стоит ограничение по времени
>>на работу скрипта, в среднем это 30 минут -но на халяве
>>может быть и меньше.
>
>какие 30 минут? вы что? 30 секунд - минута!!! и то это
>много!!!
>для того, что-бы это ограничение обойти надо после каждого таймаута запускать НОВЫЙ
>процесс, а старый - убивать.Эм, на главной там говорится только про ограничение сендмейла на 60 сек... А про то, что скрипты хоть как-то ограничены в этом плане не слова...
>Крон - это запуск твоих скриптов по расписанию.
>Указываешь время и название программы, которую надо запускать - и все.
>Только на бесплатном хостинге такое вряд-ли поддерживается.
>У нас есть, но это не бесплатный хостинг.Мдя, если бесплатник не поддерживает, тогда я пролетаю... У меня просто не коммерческий проект - это фансайт, плюс ролевая игра. А если я даже такие сайты буду вешать на платник, это я в конец разорюсь... *_*