holdfast
Новичок
своя массовая рассылка на php??? (помогите с особеностями)
Я сделал скрипт, точнее переработал, который должен делать рассылку по пользователям. Но он работает нормально только для маленького количества пользователей. Но у меня уже их 205 и это число будет расти. Сервер настроен таким образом, чтобы его не перегружать скрипт выполняется только 30 секунд, за это время успевает разослаться письма только около 60-80 пользователям. Я могу прописать команду set_time_limit, что бы отослались все 205 писем, но когда пользователей будет больше это число тоже надо увеличить!!!
Проблема в том, что мой домен удалять с хостинга за перегрузку сервера, я об этом спрашивал, но это и справедливо.
Вопрос в том, как мне сделать так, что бы письма отсылались партиями???
Т.е. например у меня 200 пользователей и каждому рассылается письмо, необходимо что бы не перегружать сервер запускать рассылку через какой-то промежуток. Например каждую минуту отсылать по 10 или 30 писем, пока не отошлются письма все пользователям.
Вот такие дела! Помогите, пожалуйста!
Сразу приведу скрипт. В кратце: заполняешь поля, нажимаешь отправить. Если добавлена картинка, то отсылка идет в html формате и прикрепляется он к письму, иначе обычная отсылка письма. Плюс можно указать добавить ли эту рассылку в новостную ленту или нет... Ну я думаю вам будет все ясно
Я сделал скрипт, точнее переработал, который должен делать рассылку по пользователям. Но он работает нормально только для маленького количества пользователей. Но у меня уже их 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();
}
}
?>