За последние 24 часа нас посетили 17575 программистов и 1314 роботов. Сейчас ищут 1482 программиста ...

Рассылка не успевает отработать за таймаут сервера

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

  1. turanza

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

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

    Подскажите, как оптимизировать рассылку, чтоб она успевала за время тайаута сервера.

    <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();

    $db->query("select * from $db_news where id='$id'");
    $db->fetch();

    $title=$db->get("SELECT title FROM $db_news WHERE id='$id'");
    $firm=$db->get("SELECT firm FROM $db_news WHERE id='$id'");
    $photo=$db->get("SELECT photo FROM $db_news WHERE id='$id'");
    $message=$db->get("SELECT message FROM $db_news WHERE id='$id'");
    $date=$db->get("SELECT date FROM $db_news WHERE id='$id'");
    $published=$db->get("SELECT published FROM $db_news WHERE id='$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>";

    echo ("<p><strong>Рассылается новость: ".$title."</strong></p><br>");

    $mailcount = 1;

    $dbn->query("select * from gamma_sub order by email limit 100");
    while ($dbn->fetch())
    {
    $email=$dbn->data->email;
    $subj="Новости *: ".$title;
    $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");
    echo ($mailcount);
    $mailcount++;
    }

    echo ("<br><strong>Разослано ".$mailcount." адресатам</strong><br>");

    $db->destroy();
    session_write_close();
    ?>

    </body>
    </html>
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    должна =)

    $mailcount = 1; - ноль вобщето
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    зачем тебе два коннекта?
     
  4. turanza

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

    С нами с:
    26 авг 2011
    Сообщения:
    5
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    понимаешь, оба твоих комментария по сути не дают ни какого ответа. igordata, и рассылка не успевает за таймаут
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    turanza
    на самом деле ответ есть =) ты просто не видишь его.
     
  6. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    turanza
    неудивительно, что не успевает. рассылка писем делается отдельным потоком с помощью планировщика.
    письма, необходимые к рассылке, пишутся в базу данных и отсылаются порциями, дабы тебя не приняли за спамера.
     
  7. turanza

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

    С нами с:
    26 авг 2011
    Сообщения:
    5
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    Спасибо. - теперь понятно в каком направлении идти хоть
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    turanza
    хостинг менять вестимо. 100 писем разослать это вобще должно всегда отрабатывать легко
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    или списаться с поддержкой и спросить какого хрена
     
  10. Match

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

    С нами с:
    10 окт 2011
    Сообщения:
    1
    Симпатии:
    0
    Адрес:
    Москва
    Если надо организовать рассылку на 10 000 email через php-скрипт, могут-ли быть какие-либо санкции от хостера?
     
  11. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Зависит от хостера :) И от того, сколько жалоб на спам дойдут до него.
     
  12. антигерой

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

    С нами с:
    22 фев 2009
    Сообщения:
    9
    Симпатии:
    0
    Адрес:
    RU, Севастополь
    Я как-то писал спамбота :))) и при приближении к таймауту - скрипт сам себя вызывал, передавая в переменной $_GET номер строки файла, на которой остановился. Вобщем работало :)))

    Но может есть возможность читать из файла не все строки последовательно, а сразу-же устанавливать маркер чтения на нужную строку - не перебирая весь массив строк с самого начала ???