URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 3364
[ Назад ]

Исходное сообщение
"Как заставить рассылку работать с определенным интервалом?"

Отправлено Lexx , 04-Июн-05 16:08 
Приветствую. У меня вот такая трабла: мой сайт расположен на Фатале (Fatal.ru). Мне нужно установить рассылку новостей постоянным посетителям, просто чтобы сообщать об обновлении на сайте раз в несколько дней. Но на Фатале установлено ограничение для работы сендмейла в 1 минуту. Скрипт у меня есть, причем рабочий. Если в базе указан только один адрес, письмо свободно отправляется. Если же больше одного, получает отправленное только первый адрес, а все последующие нет, хотя указывается, что "успешно отправлено *** писем".
А вопрос в следующем: был у меня другой скрипт, но он на пхп (на фатале плохо приживается, и вообще скрипт глючный). И там была возможность задавать ограничение на отправку писем, т.е. с интервалом в столько-то секунд.
Вопрос: можно ли подобное прописать в моем скрипте?

ЗЫ: сразу говорю, никакого программерского образования не имею, и со скриптами работаю не так давно, и знаю только основы, но быстро учусь... =))

__________________________
http://script.woweb.ru/index.htm/id/1064206756 - глючный скрипт на пхп с возможностью устанавливать интервал отправки;
http://script.woweb.ru/index.htm/id/1023464395 - неглючный скрипт на перле без оной возможности;


Содержание

Сообщения в этом обсуждении
"Как заставить рассылку работать с определенным интервалом?"
Отправлено PoizOn , 06-Июн-05 12:01 
>Приветствую. У меня вот такая трабла: мой сайт расположен на Фатале (Fatal.ru).
>Мне нужно установить рассылку новостей постоянным посетителям, просто чтобы сообщать об
>обновлении на сайте раз в несколько дней. Но на Фатале установлено
>ограничение для работы сендмейла в 1 минуту. Скрипт у меня есть,
>причем рабочий.
Лучше поставь его на cron



"Как заставить рассылку работать с определенным интервалом?"
Отправлено Lexx , 06-Июн-05 21:45 
>Лучше поставь его на cron

Эмм, вопрос может быть довольно глупый, но что такое этот корн? Ну, если в двух словах. И где о нем можно почитать?..


"Как заставить рассылку работать с определенным интервалом?"
Отправлено Solotony , 07-Июн-05 01:10 
>Эмм, вопрос может быть довольно глупый, но что такое этот корн? Ну,
>если в двух словах. И где о нем можно почитать?..

Крон - это запуск твоих скриптов по расписанию.
Указываешь время и название программы, которую надо запускать - и все.
Только на бесплатном хостинге такое вряд-ли поддерживается.
У нас есть, но это не бесплатный хостинг.


"Как заставить рассылку работать с определенным интервалом?"
Отправлено PoizOn , 07-Июн-05 10:00 
>>Эмм, вопрос может быть довольно глупый, но что такое этот корн? Ну,
>>если в двух словах. И где о нем можно почитать?..
>
>Крон - это запуск твоих скриптов по расписанию.
>Указываешь время и название программы, которую надо запускать - и все.
>Только на бесплатном хостинге такое вряд-ли поддерживается.
>У нас есть, но это не бесплатный хостинг.
Если доступа к крону нет - то тогда можешь попытаться изменить скрипт, это в принципе не сложно, поставь в самом начале запись в файл времени старта скрипта - и при каждой процедуре отправки письма следующему адресату - проверяй этот файл и сравнивай с текущем временем. Но если у тебя программерских знаний нет - то тут будет сложно.


"Как заставить рассылку работать с определенным интервалом?"
Отправлено Lexx , 07-Июн-05 15:44 
>Если доступа к крону нет - то тогда можешь попытаться изменить скрипт,
>это в принципе не сложно, поставь в самом начале запись в
>файл времени старта скрипта - и при каждой процедуре отправки письма
>следующему адресату - проверяй этот файл и сравнивай с текущем временем.
>Но если у тебя программерских знаний нет - то тут будет
>сложно.

Хмм... Оных знаний у меня и правда нет... Но надо же когда-то учиться! )) Если бы кто подсказал, какие именно команды задают запись времени...

А вот может получится как-то использовать вот такой отрывок из другого скрипта на том же перле?

---------------------------------
# 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";

-----------------------------------------------------------

Вот я думаю, как бы пристроить тот верхний кусок в нижний скрипт отправки... (мена постоянно путают эти скобки "{}" - не врубаюсь, что и где они ограничивают, и где конец, а где начало... *_*) При попытке сделать это методом "пальцем в небо" выдавались ошибки...

ЗЫ: Извиняюсь за выкладывание сюда таких огромных кусков скрипта, но самостоятельно мне с этим не разобраться... *_*


"Как заставить рассылку работать с определенным интервалом?"
Отправлено PoizOn , 07-Июн-05 16:28 
>
>А это (по-моему дилетанскому мнению) кусок из моего скрипта, выполняющий ту же
>функцию:
>------------------------------------------------
>#Собственно рассылка
>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; и т.п


"Как заставить рассылку работать с определенным интервалом?"
Отправлено Lexx , 07-Июн-05 17:10 
>Вот сюда вставь:
>
>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 - невозможно отобразить страницу из-за внутренней ошибки сервера.. :(
Видимо, у меня кривые руки... Или руки нормальные, но сервер кривой... *_*


"Как заставить рассылку работать с определенным интервалом?"
Отправлено Lexx , 07-Июн-05 17:15 
>Эхх, а по началу все так хорошо шло... Даже страница с загрузкой
>рассылки запустилась. )) Но... после двух минут ожидания при отправки "тест"
>на два адреса браузер выдает ошибку 500 - невозможно отобразить страницу
>из-за внутренней ошибки сервера.. :(
>Видимо, у меня кривые руки... Или руки нормальные, но сервер кривой... *_*
>


Хмм, удивительный факт: письма-таки дошли! =)) Хотя всего три из четырех, но это все-таки лучше, чем ничего! )) Значит скриптик-то работает, но немножко глючно - не отображает страницу, которая должна вывестись после отправки. Ну, где статистика приводится об отправке и т.п. Да в общем-то и черт бы с ней, лишь бы письма отсылались! )) Но это был тест с двумя адресами, и не знаю, как будет реагировать браузер, если будет все 85 подписчиков... ))

Но, в любом случае, огромнейшее безграничное мерси за подсказку! ;)) Оказывается, есть еще на свете люди, которым не лень помогать ламерам! ))


"Как заставить рассылку работать с определенным интервалом?"
Отправлено PoizOn , 07-Июн-05 17:25 
>>Вот сюда вставь:
>>
>>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 минут -но на халяве может быть и меньше.


"Как заставить рассылку работать с определенным интервалом?"
Отправлено Solotony , 07-Июн-05 17:38 
>Поставь таймаут поменьше, просто скорее всего на хостинге стоит ограничение по времени
>на работу скрипта, в среднем это 30 минут -но на халяве
>может быть и меньше.

какие 30 минут? вы что? 30 секунд - минута!!! и то это много!!!
для того, что-бы это ограничение обойти надо после каждого таймаута запускать НОВЫЙ процесс, а старый - убивать.


"Как заставить рассылку работать с определенным интервалом?"
Отправлено PoizOn , 07-Июн-05 17:41 
>>Поставь таймаут поменьше, просто скорее всего на хостинге стоит ограничение по времени
>>на работу скрипта, в среднем это 30 минут -но на халяве
>>может быть и меньше.
>
>какие 30 минут? вы что? 30 секунд - минута!!! и то это
>много!!!
>для того, что-бы это ограничение обойти надо после каждого таймаута запускать НОВЫЙ
>процесс, а старый - убивать.
Может быть -я просто слышал что ограничение - но сам как-то не когда не сталкивался с этим


"Как заставить рассылку работать с определенным интервалом?"
Отправлено Lexx , 07-Июн-05 17:46 
>>Поставь таймаут поменьше, просто скорее всего на хостинге стоит ограничение по времени
>>на работу скрипта, в среднем это 30 минут -но на халяве
>>может быть и меньше.
>
>какие 30 минут? вы что? 30 секунд - минута!!! и то это
>много!!!
>для того, что-бы это ограничение обойти надо после каждого таймаута запускать НОВЫЙ
>процесс, а старый - убивать.

Эм, на главной там говорится только про ограничение сендмейла на 60 сек... А про то, что скрипты хоть как-то ограничены в этом плане не слова...


"Как заставить рассылку работать с определенным интервалом?"
Отправлено Lexx , 07-Июн-05 15:28 
>Крон - это запуск твоих скриптов по расписанию.
>Указываешь время и название программы, которую надо запускать - и все.
>Только на бесплатном хостинге такое вряд-ли поддерживается.
>У нас есть, но это не бесплатный хостинг.

Мдя, если бесплатник не поддерживает, тогда я пролетаю... У меня просто не коммерческий проект - это фансайт, плюс ролевая игра. А если я даже такие сайты буду вешать на платник, это я в конец разорюсь... *_*