[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: отправка всем почты через цикл
maxmsmax
Добрый день!
Помогите пожалуйста, чтото голова совсем не варит уже)

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

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

    $result = mysql_query("SELECT * FROM users",$db);
while ($row = mysql_fetch_array($result)){
for ($i=0; $i < count ($row['id']); $i++){
if (!empty($row['email'][$i])){
if(echo $row['email'];){
echo "Адрес - ".$row[email]." - статус ОК";
} else {
echo "Адрес - ".$row[email]." - статус BAD";
}
}


Спасибо большое за помощь!



Спустя 32 минуты, 59 секунд (31.10.2011 - 22:07) imbalance_hero написал(а):
maxmsmax
и? Я не вижу у тебя, чтобы ты отправлял.

Спустя 2 часа, 29 минут, 56 секунд (1.11.2011 - 00:37) maxmsmax написал(а):
    $result = mysql_query("SELECT * FROM users",$db);
while ($row = mysql_fetch_array($result)){
for ($i=0; $i < count ($row['id']); $i++){
if (!empty($row['email'][$i])){
if(mail($row['email'], $subject, $message, $headers)){
echo "Адрес - ".$row[email]." - статус ОК";
} else {
echo "Адрес - ".$row[email]." - статус BAD";
}

}


ну вроде так ... но ?!?!

 ! 

М
Выделяйте код тегами [php] !
Winston

Спустя 2 минуты, 16 секунд (1.11.2011 - 00:39) imbalance_hero написал(а):
maxmsmax
for убери, и будет тебе рассылка в цикле. В чём проблема?

Спустя 1 час, 29 минут, 30 секунд (1.11.2011 - 02:09) Guest написал(а):
$result = mysql_query("SELECT email FROM users", $db);

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
if (!empty($row['email'])) {
if (mail($row['email'], $subject, $message, $headers)) {
echo "Адрес - " . $row['email'] . " - статус ОК";
} else {
echo "Адрес - " . $row['email'] . " - статус BAD";
}
}
}

Спустя 22 минуты, 8 секунд (1.11.2011 - 02:31) Guest написал(а):
Еще вариант:
$result = mysql_query("SELECT email FROM users", $db);
$allEmailsArray = array();
$allEmailsString = '';

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
if (filter_var($row['email'], FILTER_VALIDATE_EMAIL)) {
$allEmailsArray[] = $row['email'];
} else {
echo "$row[email] - не прошел валидацию";
}

}


if (count($allEmailsArray)) {
$allEmailsString = implode(', ', $allEmailsArray);
mail($allEmailsString, $subject, $message);
}

Спустя 9 часов, 26 минут, 57 секунд (1.11.2011 - 11:58) maxmsmax написал(а):
ооо! Спасибо огромное ....
А скажите, если допустим во время выполнения я прерву цикл, а потом запущу снова, он же будет рассылать с самого начала ? Как сделать что бы рассылка продолжалась с того момента, где остановилась ?

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

Очень благодарен smile.gif

Спустя 26 минут, 17 секунд (1.11.2011 - 12:24) phz написал(а):
Почитайте статью на эту тему Эмуляция многопоточности в PHP

Спустя 3 часа, 38 минут, 50 секунд (1.11.2011 - 16:03) maxmsmax написал(а):
ну вроде устраивает вариант который предожили выше. Осталось только разобраться как :
1. Сделать, проверку, что бы в случае сбоя отправлять продолжая с ошибки, а не сначала и всем пользователям. Т.е. если не отработал до конца, то при следующем запуске он продолжает работу там где остановился и
2. Как его поставить в CRON чтобы это все происходило в определенное время ?

Спустя 1 час, 3 минуты, 18 секунд (1.11.2011 - 17:06) maxmsmax написал(а):
да если можно, скиньте примерчик) Буду благодарен.

Спустя 3 часа, 31 минута, 25 секунд (1.11.2011 - 20:38) imbalance_hero написал(а):
maxmsmax
Насчет крона - напиши хостингу, они тебе ответят, где и как настраивается. Если даже после этого их пример работать не будет, тогда ещё раз напиши, и если опять не будет - напиши нам smile.gif У меня была похожая ситуация, они пишут, я его копи-пастю, а их пример не работает вообще. Благо подсказали как сделать по-другому.

Насчет того, как фиксировать, а ты в случае удачи обновляй запись в БД, что рассылка этому пользователю уже была совершена, ставь там что-то типо sended = 1, а тем, кому не отправил: sended = 0. А ещё улучшить, так собирать записи в общий массив, кому уже было отправлено mail = true, а потом в случае false ( или окончания скрипта) записи обновлять просто.

Спустя 5 часов, 55 минут, 18 секунд (2.11.2011 - 02:33) maxmsmax написал(а):
Да, спасибо ОГРОМНОЕ !!!
Вы помогли решить мою задачу ...
очень рад)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.