Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Сеть > Таймаут между отправлением писем.


Автор: r0ot 17.12.2006, 13:41
Существует скрипит для рассылки оповещений (долго описывать что это за оповещения, но если кто-то сомневается не собираюсь ли я использовать этот скрипт для рассылки спама могу объяснить подробнее) мылы берутся из txt файла и на них идет рассылка. Не смотря на то что количество мыл в базе пока что всего 20 хостер уже делал неоднократные предупреждения ругаясь на спам. Полагаю что если установить таймаут между отсылкой каждого письма то проблема исчезнет. Может кто подскажет как это реализовать?
Код самой отправки привожу ниже:

Код

<?
set_time_limit(0);
ignore_user_abort(1);

$header = "From: $from \r\n";
$header .= "Content-Type: text/plain; charset=\"windows-1251\"\n\n";




$subject = substr ($HTTP_POST_VARS["subject"],0,32);
$message = substr ($HTTP_POST_VARS["message"],0,1024);
$from = substr ($HTTP_POST_VARS["from"],0,32);


$fp = fopen("emails.txt", "r");
$count = 0;
if(!$fp || strlen($subject) == 0 || strlen($message) == 0){
    echo("<br><center>Error! Upload emails.txt and write message!</center>");
    exit;
}
else{
    while(!feof($fp)){
        $to = fgets($fp);
        mail($to, $subject, $message, $header);
        $count = $count + 1;
        $fl = fopen("log.txt", "w+");
        fputs($fl, "$count letters was sended...");
        fclose($fl);
    }
    }    
?>

Автор: Mal Hack 17.12.2006, 15:46
Для таких вещей CRON используется.

Автор: r0ot 17.12.2006, 19:09
Если не сложно на каких нибудь примерах а то php_manual ничего конкретного не выдал =(

Автор: Mal Hack 17.12.2006, 19:30
Тут в поиск CRON

Автор: OverClocker 9.9.2007, 09:13
Почему именно cron? У меня на хостинге нет такой возможности.Но определяется, как спам всё равно. Что делать? Может действительно сделать
sleep(5)? 

Автор: CyClon 9.9.2007, 13:14
Крон в плане обнаружения спам-скрипта ниче не даст. Просто ставь sleep(x) после каждого или нескольких писем.

ЗЫ: Лично у меня скрипт отправлял около 500 писем и вылетал. Если что - виноват апач. Запускай через popen в фоне и будет работать пока не закончит.

Автор: OverClocker 9.9.2007, 15:16
CyClon, спасибо, брателло smile Ещё утром, когда писал то сообщение, дал указание скрипту sleep(20) - всё окейно отправляет и до сих пор. И то, что функция set_time_limit() ограничена у меня на хосте - откровенно говоря гон. smile

Ну а то, что крон и спам-скрипт никак не связаны - это и ежу понятно smile Но всё равно спасибо за отклик! С popen тоже попробую, авось так и удобнее для меня будет.

Автор: CyClon 9.9.2007, 16:35
Просто когда запускаешь процесс с HTTP, то он запускается через апач, а у апача есть свой таймаут и он ен любит подвисшие процессы, так что на некоторых хостах даже если в скрипте set_time_limit(0) то скрипт может вылететь по тайм-ауту апача, поэтому запускать нужно через cron/popen/exec/system и т.п.

Добавлено через 1 минуту и 12 секунд
Я делаю так:

Код
if (file_exists('lm_running')) {
    ... CODE ...
    unlink('lm_running');
} else if (isset($_GET['start'])) {
    $fp = popen('php -f ' . __FILE__ . ' &', 'r');
    pclose($fp);
}


Добавлено через 1 минуту и 58 секунд
ЗЫ: lm = Love Mailer, чтобы вопросов не было smile

Автор: OverClocker 9.9.2007, 19:51
popen запрещён у меня на хосте. smile) Но спасибо за совет. smile Таймаут пишет, что ограничен, точнее set_time_out задизаблен, но всё равно всё отлично работает. smile

Автор: IAmEternaL 10.10.2007, 16:24
насколько я знаю для рассылок чаще используют socket подключение к серверу отправки почты (SMTP), что позволяет без проблем слать подряд кучу писем

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)