За последние 24 часа нас посетили 60811 программистов и 1771 робот. Сейчас ищут 822 программиста ...

отправка почты всем пользователям

Тема в разделе "PHP и базы данных", создана пользователем maxmsmax, 1 ноя 2011.

  1. maxmsmax

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

    С нами с:
    1 ноя 2011
    Сообщения:
    8
    Симпатии:
    0
    Добрый день!
    Помогите пожалуйста, чтото голова совсем не варит уже)

    Задача состоит в том чтобы отправлять пользователям письма через функцию mail (выбирая их из бд) в определнное время через CRON... И если вдруг ошибка то продолжить рассылать с последнего удачного...

    Я так понимаю что нужно вытащить все емаил из базы, и через цикл запустить это
    Пока насобирал вот такой код, конечно же не рабочий)

    Код (Text):
    1.     $result = mysql_query("SELECT * FROM users",$db);
    2.     while ($row = mysql_fetch_array($result)){
    3. for ($i=0; $i < count ($row['id']); $i++){
    4.  if (!empty($row['email'][$i])){  
    5.  if(echo $row['email'];){
    6.  echo "Адрес - ".$row[email]." - статус ОК";
    7.  } else {
    8.  echo "Адрес - ".$row[email]." - статус BAD";
    9.  }
    10.     }
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Каждую отдельную рассылку на каждый имеил надо логить в бд и тогда сразу поймешь какие уже ушли и какие надо разослать
     
  3. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Нахрен вообще вот это?
    Код (Text):
    1. for ($i=0; $i < count ($row['id']); $i++){
    Код (Text):
    1. if(echo $row['email'];){
    Пипец какой-то... echo в if-е, да ещё с ; на конце

    PHP:
    1. <?
    2. $result = mysql_query("SELECT * FROM `users`", $db);
    3. while($row = mysql_fetch_array($result)) {
    4.     if(!empty($row['email'])) {
    5.         echo 'Адрес - ' . $row['email'] . ' - статус ОК';
    6.     } else {
    7.         echo 'Адрес - ' . $row['email'] . ' - статус BAD';
    8.     }
    9. }
    Видимо, ты такое хотел для тестового просмотра списка адресов.
    Намёка на попытку отправить письмо - вообще не вижу в коде.
     
  4. maxmsmax

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

    С нами с:
    1 ноя 2011
    Сообщения:
    8
    Симпатии:
    0
    Код (Text):
    1.     $result = mysql_query("SELECT email FROM users",$db);
    2.     while ($row = mysql_fetch_array($result, MYSQL_ASSOC)){
    3.  if (!empty($row['email'])){    
    4.  if(mail($row['email'], $subject, $message, $headers)){
    5.  echo "Адрес - ".$row[email]." - статус ОК";
    6.  } else {
    7.  echo "Адрес - ".$row[email]." - статус BAD";
    8.  }
    9.     }
    10.       }
    Ну вроде вот правильный цикл с рассылкой по всем ??
    А скажите, если допустим во время выполнения я прерву цикл, а потом запущу снова, он же будет рассылать с самого начала ? Как сделать что бы рассылка продолжалась с того момента, где остановилась ?

    И как все это повесить на CRON что бы выполнялось в определенное время ?

    Очень благодарен :) !
     
  5. maxmsmax

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

    С нами с:
    1 ноя 2011
    Сообщения:
    8
    Симпатии:
    0
    т.е. мне надо вот тут

    Код (Text):
    1.  echo "Адрес - ".$row[email]." - статус ОК";
    Поставить чтобы статус записывался в бд ?

    А дальше как, что бы в следующий раз проверялось, и в случае ошибки продолжал с места ошибки ?
    Спасибо!
     
  6. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Перед запуском новой рассылки просмотреть б.д. и проверить до куда дошло. Начать с того места, где остановился. Неужели так трудно догадаться?
     
  7. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    При создании рассылки создаешь на каждого подписанта запись в бд.

    Потом при запуске робота-рассылаки он берет часть свободных записей и отмечает их что забрал. При успешном отправлении помечает что отправил или вобще удаляет - это уже как тебе нрааца. При этом нужен еще один крон-подчищака который будет сбрасывать статус у тех записей что давно забрали и так и не отправили или у эррорных. Усё! Профит.
     
  8. maxmsmax

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

    С нами с:
    1 ноя 2011
    Сообщения:
    8
    Симпатии:
    0
    ну это понятно, а как реализовать это ? мм