|
|
|
| Вот такая проблема: нужно рассылку организовать для подписчиков. На хосте стоит ограничение в 50 адресов за раз и 15 секунд между отправками. А адресатов уже далеко за 200 штук... Кое-как получилось последовательно выбирать по 50 адресов из базы данных, но вот как потом на полученные адреса разослать письма, да еще с интервалом в 15 секунд, никак не пойму...
<?
include('db_main.php');
$count_mail=mysql_num_rows(mysql_query("select id from subscription"));
$u = ceil($count_mail / 50);
for($i = 0; $i < $u; $i++){
$w = (50 * $i);
$n = $w.",50";
$query_m = "select email_sub from subscription limit $n";
$q_mail = mysql_query($query_m);
for($j = 0; $j < mysql_num_rows($q_mail); $j++){
$f_mail = mysql_fetch_array($q_mail);
$mail = $f_mail[email_sub];
}
$subj = "тема";
$mess = "текст письма";
@mail($mail, $subj, $mess, "From: ...");
}
?>
|
А вот получится ли переменная $mail (список адресатов) правильного вида прямо из майсквел, чтобы ее можно было отправить, или нужно ее как-то дополнительно обработать? И как задать интервал между отправками?
ЗЫ: если вдруг не туда создала тему, звиняйте, просто тут вроде с mysql связано... Заранее благодарю. )) | |
|
|
|
|
|
|
|
для: Zew
(23.10.2005 в 14:50)
| | А cron на сервере имеется?
PS Задержка скрипта осуществляется при помощи функции sleep(), в качестве аргумента которой передаётся число секунд, на которое необходимо задержать скрипт
только это может не сработать, так как на выполнение скрипта обычно отводится 30 секунд. | |
|
|
|
|
|
|
|
для: cheops
(23.10.2005 в 20:25)
| | можно делать паузу в 15 сек, а потом делать переадресацию скрипта на самого себя передав значение последнего email. Правда, это не сработает если скрипт работает в автоматическом режиме.
Можно в базе ставить метку напротив адресов куда сообщения отправлены, вызывать скрипт по крону, например, раз в 10 мин и, если есть неотправленые письма - рассылать их. Нагрузку это создавать не должно вроде. | |
|
|
|
|
|
|
|
для: Loki
(23.10.2005 в 20:36)
| | Да я тоже ко второму варианту склоняюсь... | |
|
|
|
|
|
|
|
для: cheops
(23.10.2005 в 20:44)
| | Хм, cron-то есть вроде как, вот только я с таким зверем никогда раньше не сталкивалась, и для чего он вообще предназначен, а тем более, как с ним работать, совершенно без понятия... | |
|
|
|
|
|
|
|
для: Zew
(23.10.2005 в 22:33)
| | Это банальный "планировщик заданий" - запускает программы (скрипты) по расписанию. Вы можете даже поставить его себе на локальную машину и потренироваться. В ссылках, приведённых в теме http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=4321 имеется URL на бесплатную версию для Windows, хелп которого (в том числе и на русском языке) описывает правила составления заданий. Возможно у вас на хостинге имеется панель для управления конфигурационным файлом cron.tab. | |
|
|
|
|
|
|
|
для: cheops
(23.10.2005 в 20:25)
| | Да, и еще, подскажите плиз, почему этот скрипт как-то криво выбирает адреса, хотя вроде и запрос получается верный - если ввести его через пхпмайадмин, он выбирает то, что нужно. А если через скрипт, адреса только первый раз выдаются в количестве 50-ти, а далее сколько угодно, но не 50... *_*
http://hellsinguniverse.ru/subscript.php - вот скрипт. Запрос, выводящий результат, прописывается там же.... Вот сам скрипт сейчас:
<?
include('db_main.php');
$count_mail=mysql_num_rows(mysql_query("select id from subscription"));
$u = ceil($count_mail / 50);
for($i = 0; $i < $u; $i++){
$w = (50 * $i);
$n = $w.",50";
$query_m = "select email_sub from subscription limit $n";
$q_mail = mysql_query($query_m);
for($j = 0; $j < mysql_num_rows($q_mail); $j++){
$f_mail = mysql_fetch_array($q_mail);
$emails = $emails.$f_mail[email_sub]."; ";
}
echo "<hr>".$query_m."<hr>".$emails;
}
?>
|
| |
|
|
|
|
|
|
|
для: Zew
(24.10.2005 в 00:59)
| | Хм... а сколько угодно в какую сторону от 50 - больше или меньше? | |
|
|
|
|
|
|
|
для: cheops
(24.10.2005 в 13:36)
| | Я кажется уже поняла, почему он отображает так много - там же в цикле $emails = $emails.что-то там, т.е. в первом внешнем цикле все правильно идет, а дальше прибавляется еще и значение переменной $emails, полученной в предидущих циклах. Поэтому первый раз выводится первые 50 мейлов, во втором - первые 50 + вторые 50, ну и так далее... Вот только я незнаю, как бы это дело исправить... =( | |
|
|
|
|
|
|
|
для: Zew
(24.10.2005 в 15:04)
| | В качестве первого оператора цикла сдледует поставить
| |
|
|
|
|
|
|
|
для: cheops
(24.10.2005 в 21:07)
| | пасиб, теперь работает. )) | |
|
|
|
|
|
|
|
для: Zew
(24.10.2005 в 15:04)
| | Да, и еще: я вроде разобралась с отсылкой писем, но вот может кто знает, как сделать чтобы в полученном письме не светились все адреса? А то нехорошо как-то, как минимум 50 адресов подписчиков будут видны каждому из них... )) | |
|
|
|
|
|
|
|
для: Zew
(24.10.2005 в 23:35)
| | Самый очевидный вариант: отправлять одно письмо за один проход цикла. | |
|
|
|
|
|
|
|
для: Loki
(25.10.2005 в 09:44)
| | Не, ну это не реально - меня хостеры убьют за такое. =)) И так-то придется почти две минуты отсылать все письма из-за интервала в 15 секунд между каждым, а то этот скрипт сутки выполняться будет. =))
Да, и может кто знает, как в письмо хтмл вставить? Я тут тестирую на собственном мыле - все теги так и прописываются текстом... | |
|
|
|
|
|
|
|
для: Zew
(24.10.2005 в 23:35)
| | При указании e-mail, куда необходимо отправить копии используйте вместо заголовка "cc", "bcc" - слепые копии. | |
|
|
|
|
|
|
|
для: cheops
(25.10.2005 в 18:32)
| | Хм, я правильно поняла, это надо указать в переменной $emails что-то вроде "bcc: mail@mail.ru mail2@mail.ru mail3@mail.ru" ? Или перед каждым адресом прописывать? Или еще как? | |
|
|
|