Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите с рассылкой...
 
 автор: Zew   (23.10.2005 в 14:50)   письмо автору
 
 

Вот такая проблема: нужно рассылку организовать для подписчиков. На хосте стоит ограничение в 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 связано... Заранее благодарю. ))

   
 
 автор: cheops   (23.10.2005 в 20:25)   письмо автору
 
   для: Zew   (23.10.2005 в 14:50)
 

А cron на сервере имеется?

PS Задержка скрипта осуществляется при помощи функции sleep(), в качестве аргумента которой передаётся число секунд, на которое необходимо задержать скрипт
<?php
  sleep
(15);
?>

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

   
 
 автор: Loki   (23.10.2005 в 20:36)   письмо автору
 
   для: cheops   (23.10.2005 в 20:25)
 

можно делать паузу в 15 сек, а потом делать переадресацию скрипта на самого себя передав значение последнего email. Правда, это не сработает если скрипт работает в автоматическом режиме.
Можно в базе ставить метку напротив адресов куда сообщения отправлены, вызывать скрипт по крону, например, раз в 10 мин и, если есть неотправленые письма - рассылать их. Нагрузку это создавать не должно вроде.

   
 
 автор: cheops   (23.10.2005 в 20:44)   письмо автору
 
   для: Loki   (23.10.2005 в 20:36)
 

Да я тоже ко второму варианту склоняюсь...

   
 
 автор: Zew   (23.10.2005 в 22:33)   письмо автору
 
   для: cheops   (23.10.2005 в 20:44)
 

Хм, cron-то есть вроде как, вот только я с таким зверем никогда раньше не сталкивалась, и для чего он вообще предназначен, а тем более, как с ним работать, совершенно без понятия...

   
 
 автор: cheops   (24.10.2005 в 13:34)   письмо автору
 
   для: Zew   (23.10.2005 в 22:33)
 

Это банальный "планировщик заданий" - запускает программы (скрипты) по расписанию. Вы можете даже поставить его себе на локальную машину и потренироваться. В ссылках, приведённых в теме http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=4321 имеется URL на бесплатную версию для Windows, хелп которого (в том числе и на русском языке) описывает правила составления заданий. Возможно у вас на хостинге имеется панель для управления конфигурационным файлом cron.tab.

   
 
 автор: Zew   (24.10.2005 в 00:59)   письмо автору
 
   для: 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;
}
?>

   
 
 автор: cheops   (24.10.2005 в 13:36)   письмо автору
 
   для: Zew   (24.10.2005 в 00:59)
 

Хм... а сколько угодно в какую сторону от 50 - больше или меньше?

   
 
 автор: Zew   (24.10.2005 в 15:04)   письмо автору
 
   для: cheops   (24.10.2005 в 13:36)
 

Я кажется уже поняла, почему он отображает так много - там же в цикле $emails = $emails.что-то там, т.е. в первом внешнем цикле все правильно идет, а дальше прибавляется еще и значение переменной $emails, полученной в предидущих циклах. Поэтому первый раз выводится первые 50 мейлов, во втором - первые 50 + вторые 50, ну и так далее... Вот только я незнаю, как бы это дело исправить... =(

   
 
 автор: cheops   (24.10.2005 в 21:07)   письмо автору
 
   для: Zew   (24.10.2005 в 15:04)
 

В качестве первого оператора цикла сдледует поставить
<?php
  $emails 
"";
?>

   
 
 автор: Zew   (24.10.2005 в 21:12)   письмо автору
 
   для: cheops   (24.10.2005 в 21:07)
 

пасиб, теперь работает. ))

   
 
 автор: Zew   (24.10.2005 в 23:35)   письмо автору
 
   для: Zew   (24.10.2005 в 15:04)
 

Да, и еще: я вроде разобралась с отсылкой писем, но вот может кто знает, как сделать чтобы в полученном письме не светились все адреса? А то нехорошо как-то, как минимум 50 адресов подписчиков будут видны каждому из них... ))

   
 
 автор: Loki   (25.10.2005 в 09:44)   письмо автору
 
   для: Zew   (24.10.2005 в 23:35)
 

Самый очевидный вариант: отправлять одно письмо за один проход цикла.

   
 
 автор: Zew   (25.10.2005 в 18:06)   письмо автору
 
   для: Loki   (25.10.2005 в 09:44)
 

Не, ну это не реально - меня хостеры убьют за такое. =)) И так-то придется почти две минуты отсылать все письма из-за интервала в 15 секунд между каждым, а то этот скрипт сутки выполняться будет. =))
Да, и может кто знает, как в письмо хтмл вставить? Я тут тестирую на собственном мыле - все теги так и прописываются текстом...

   
 
 автор: cheops   (25.10.2005 в 18:32)   письмо автору
 
   для: Zew   (24.10.2005 в 23:35)
 

При указании e-mail, куда необходимо отправить копии используйте вместо заголовка "cc", "bcc" - слепые копии.

   
 
 автор: Zew   (25.10.2005 в 20:22)   письмо автору
 
   для: cheops   (25.10.2005 в 18:32)
 

Хм, я правильно поняла, это надо указать в переменной $emails что-то вроде "bcc: mail@mail.ru mail2@mail.ru mail3@mail.ru" ? Или перед каждым адресом прописывать? Или еще как?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования