За последние 24 часа нас посетили 15065 программистов и 1753 робота. Сейчас ищут 1459 программистов ...

подвисает отправка почты

Тема в разделе "Работа с почтой", создана пользователем turanza, 7 сен 2011.

  1. turanza

    turanza Активный пользователь

    С нами с:
    26 авг 2011
    Сообщения:
    5
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    сделал рассылку:
    сообщение сгружается в базу, туда же статус рассылки и айди абонента (последнего, кому отправлено сообщение) и максимальный айди абонента.
    дальше сделал саму рассылку (текст ниже) и написал рассылку по расписанию (cronTab) - скрипт запускается каждую минуту и рассылает соответственно по 30 сообщений, НО проблема заключается в том,что он приодически зацикливается, то есть после отправки всех 30-ти сообщений не записывает в базу новое значение айди последнего абонента, которому было отправлено сообщение, ну и получается,что отправляет сообщения одним и тем же 30-ти. Подскажите почему так происходит.



    <html>
    <head>
    <title>Рассылка новости</title>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    </head>

    <body>
    <?php

    require_once("config.inc.php");
    require_once("librarias/sql.lib.php");
    require_once("librarias/functions.lib.php");



    $db=new sql();
    $dbn=new sql();
    $limit =30; //лимит отправляемых за раз сообщений
    $id =0;
    $status = 0;


    $db->query("SELECT `id`,`message`, `title` , `result`, `number`, `news_id` FROM `send_mail` where(`status`='0')");
    /*
    id- id
    message - имя базы, откуда извлекается сообщение
    news_id - id рассылаемой новости
    title - тема сообщения
    result - максимальный id, которому отправлены сообщения
    number - максимальный id который есть в базе
    */

    while($db->fetch())
    {
    $messcount=0;
    $idn=$db->data->id;
    $db_news=$db->data->message;
    $news_id=$db->data->news_id;
    //$m ="SELECT message FROM ".$db_news." WHERE id='".$news_id."'";
    $message=$dbn->get("SELECT message FROM ".$db_news." WHERE id='".$news_id."'");
    $mess="<html><head><base href=http://www.*.spb.ru/></head><body>$message<br><a href=\"http://www.*.spb.ru\">*</a><p>Для отказа от данной рассылки: зайдите по адресу <a href=\"http://www.*.spb.ru\">www.*.spb.ru</a> и введите свой адрес в поле Подписка.</body></html>";
    $title=$db->data->title;
    $res=$db->data->result;
    $maxId = $db->data->number;
    $subj="Новости *-Санкт-Петербург : ".$title;
    $t="";
    $dbn->query("SELECT `id`, `email` FROM gamma_sub where (id>'".$res."') Order by `id` limit ".$limit);//щ
    while($dbn->fetch())
    {
    $email=$dbn->data->email;
    $ids=$dbn->data->id;
    $temp=mail("$email", $subj, $mess, "MIME-Version: 1.0\r\nFROM: sale@*.spb.ru\r\nContent-Type: text/html; charset=\"windows-1251\"\r\nContent-Transfer-Encoding: 8bit");
    $messcount++;
    $t= $t.$messcount." ".$email." <br>";
    $id=$ids;
    }
    //$messx = "новость условно разослана >>".$messcount."<< получателям, максимальный ID =>>".$id."<<,<br>".$mess."<br> запрос: <br>".$m."";
    $temp=mail("*@*.spb.ru", $subj, $t, "MIME-Version: 1.0\r\nFROM: sale@*.spb.ru\r\nContent-Type: text/html; charset=\"windows-1251\"\r\nContent-Transfer-Encoding: 8bit");
    if($id == $maxId)
    {
    $dbn->query("UPDATE send_mail SET `status`='1' WHERE(`id`='$idn')");
    }else
    {
    $dbn->query("UPDATE send_mail SET `result`='".$id."' WHERE(`id`='".$idn."')");
    //echo("<br>query:UPDATE send_mail SET `result`='".$id."' WHERE(`id`='".$idn."') <br>");
    }
    $id=0;
    }
    $db->destroy();
    //$dbn->destroy();
    session_write_close();
    ?>

    </body>
    </html>
     
  2. turanza

    turanza Активный пользователь

    С нами с:
    26 авг 2011
    Сообщения:
    5
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    есть мысль, что происходит сие из-за того, что авторизация после отправки по тайауту слетает(запускается рассылка из cms-ки) и он больше не может записывать в базу. хотя сам вот этот файлик запускается с cronTabа... посему непонятно