своя массовая рассылка на php??? (помогите с особеностями)

Статус
В этой теме нельзя размещать новые ответы.

holdfast

Новичок
своя массовая рассылка на php??? (помогите с особеностями)

Я сделал скрипт, точнее переработал, который должен делать рассылку по пользователям. Но он работает нормально только для маленького количества пользователей. Но у меня уже их 205 и это число будет расти. Сервер настроен таким образом, чтобы его не перегружать скрипт выполняется только 30 секунд, за это время успевает разослаться письма только около 60-80 пользователям. Я могу прописать команду set_time_limit, что бы отослались все 205 писем, но когда пользователей будет больше это число тоже надо увеличить!!!
Проблема в том, что мой домен удалять с хостинга за перегрузку сервера, я об этом спрашивал, но это и справедливо.
Вопрос в том, как мне сделать так, что бы письма отсылались партиями???
Т.е. например у меня 200 пользователей и каждому рассылается письмо, необходимо что бы не перегружать сервер запускать рассылку через какой-то промежуток. Например каждую минуту отсылать по 10 или 30 писем, пока не отошлются письма все пользователям.
Вот такие дела! Помогите, пожалуйста!
Сразу приведу скрипт. В кратце: заполняешь поля, нажимаешь отправить. Если добавлена картинка, то отсылка идет в html формате и прикрепляется он к письму, иначе обычная отсылка письма. Плюс можно указать добавить ли эту рассылку в новостную ленту или нет... Ну я думаю вам будет все ясно
Код:
<?php
 include "../config.php";
 // Проверим - достаточно ли информации для занесения в базу данных
 if(empty($_POST['name'])) links($_POST['status'], "Отсутствует заголовок");
 if(empty($_POST['body'])) links($_POST['status'], "Содержание не введено");
 if(empty($_POST['url_text']) && !empty($_POST['url'])) $_POST['url_text'] = $_POST['url'];
 // Определяем, скрыта новость или нет
 if($_POST['hide'] == "on") $showhide = "show";
 else $showhide = "hide";
 // Добавляем протокол в url, если пользователь забыл это сделать сам
 $_POST['url'] = strtr($_POST['url'], "HTTP", "http");
 if (!empty($_POST['url'])) {
   if (strtolower((substr($_POST['url'], 0, 7))!="http://") && (strtolower(substr($_POST['url'], 0, 7))!="ftp://")) $url="http://".$_POST['url'];
 }
 // Заменяем одинарные кавычки обратными, чтобы избежать конфликта
 // при добавлении информации в таблицу
 $_POST['name'] = str_replace("'", "`", $_POST['name']);
 $_POST['body'] = str_replace("'", "`", $_POST['body']);
 $picture = "";
 // Если поле выбора вложения не пустое - закачиваем его на сервер
 if (!empty($_FILES['putfile']['tmp_name']) && $_FILES['putfile']['tmp_name'] != "-")
 {
   // Закачиваем файл
   $path="files/".$_FILES['putfile']['name'];
   // Путь указан верно, так как в админе нужно поднятся на два каталога вверх,
   // а на сайте на один
   if (copy($_FILES['putfile']['tmp_name'], "../".$path)) $picture = $path;
 }
 // Формируем и выполняем SQL-запрос на добавление новости
 $query = "INSERT INTO news VALUES (0,
                                    '".$_POST['name']."',
                                    '".$_POST['body']."',
                                    now(),
                                    '".$_POST['url']."',
                                    '".$_POST['url_text']."',
                                    '$picture',
                                    '$showhide')";
 if(mysql_query($query))
 {
   // Отправляем почтовое сообщение подписчику
   $query = "SELECT * FROM users2
          WHERE status = 'active'";
   $usr = mysql_query($query);
   $totalmail = $usr;
   if(!$usr)
   {
     echo mysql_error()."<br>";
     echo $query."<br>";
     links($_POST['status'], "Ошибка при обращении к базе подписчиков");
   }
   if(mysql_num_rows($usr)>0)
   {
     $thm = "Новости проекта FiveSOLUTIONS.biz";
     $msg = "<b>".$_POST['name']."</b><br>".$_POST['body'];
     $msg1 = "".$_POST['name']."\n".$_POST['body'];
  $email = "[email protected]";
     // Изменяем кодировку
     //$thm =  convert_cyr_string(stripslashes($thm),'w','k');
     //$msg =  nl2br(convert_cyr_string(stripslashes($msg),'w','k'));
     if(empty($picture)) while($users = mysql_fetch_array($usr)) mail($users['email'], $thm, $msg1, "Content-type:text/plain; charset = windows-1251\r\nFrom:$email");
     else while($users = mysql_fetch_array($usr)) send_mail($users['email'], $thm, $msg, "../".$picture, "Content-Disposition:inline; Content-type:text/html; charset = windows-1251\r\nFrom:$email");
  }
   // Если запрос выполнен удачно, осуществляем автоматический переход
   // на главную страницу администрирования
   echo "<HTML><HEAD>
         <META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php?start=".$_POST['start']."'>
         </HEAD>";
 }
 else
 {
   echo mysql_error();
   links($_POST['status'], "Ошибка при добавлении новостной позиции");
 }
 // Вспомогательная функция для вывода ссылок возврата
 function links($status, $msg)
 {
   echo "<p>".$msg."</p>";
   echo "<p><a href=# onClick='history.back()'>Вернуться к правке новости</a></p>";
   echo "<p><a href=index.php?id_parent=$id_catalog&status=$status>Администрирование рассылки</a></p>";
   exit();
 }
 function send_mail($to, $thm, $html, $path)
 {
   $fp = fopen($path,"r");
   if (!$fp)
   {
     print "Файл $path не может быть прочитан";
     exit();
   }
   $file = fread($fp, filesize($path));
   fclose($fp);
   $path = substr($path,12);
 
   $boundary = "--".md5(uniqid(time())); // генерируем разделитель
   $headers .= "MIME-Version: 1.0\n";
   $headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
   $multipart .= "--$boundary\n";
   $kod='windows-1251';
   $multipart .= "Content-Type: text/html; charset=$kod\n";
   $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
   $multipart .= "$html\n\n";

   $message_part = "";
   $message_part .= "Content-Type: application/octet-stream";
   $message_part .= "; file_name = \"$path\"\n";
   $message_part .= "Content-Transfer-Encoding: base64\n";
   $message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n\n";
   $message_part .= chunk_split(base64_encode($file))."\n";
   $multipart .= "--$boundary\n".$message_part."--$boundary--\n";

   if(!mail($to, $thm, $multipart, $headers))
   {
     echo "К сожалению, письмо не отправлено";
     exit();
   }
 }
?>
 

HraKK

Мудак
Команда форума
Тема закрыта. Учитесь пользоваться поиском.

Прежде чем задавать вопрос - используйте поиск по форуму и FAQ:
На нахождение готового ответа на свой вопрос Вы потратите меньше своего и чужого времени, чем на создание новой темы.

Поиск по форуму

http://phpclub.ru/faq/
http://phpclub.ru/detail/
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху