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

Форум MySQL

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

 

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

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

тема: Переделать рассылку под базу данных MySQL
 
 автор: Yanka   (23.03.2006 в 15:45)   письмо автору
 
 

Вот на этом форуме нашла скрипт "Своя рассылка"... Тока она вот на файлах... и если 1000
емайлов то получаеться очень долго, а точнее вообще не получается... У сервера стоит ограничение на выполнение...
Так, вот помогите переделать под БД... Надеюсь будет быстрее?!
Вот сами скрипты:

<?
$file 
"maillist.txt"// файл, содержащий адреса

error_reporting(0); // запрещаем вывод сообщений о возможных ошибках

function test_mail($char// функция, проверяющая реальность адреса

{
$flag false;
if (
eregi("^[_\.0-9a-z-]+@([0-9a-z][-0-9a-z\.]+)\.([a-z]{2,3}$)"$char)) $flag true;
if (
$flag) return true;
else return 
false;
}

$email trim(strtolower($email)); // получаем введеный в
// форму адрес с 
// символами в нижнем регистре

function copy_mail($char// проверяем, есть ли такой адрес в базе
{
$file "maillist.txt";
$list file($file);
for (
$i 0$i sizeof ($list); $i++)
if (
$char == trim($list[$i])) $flag true;

if (
$flag) return true;
else return 
false;
}

echo 
"<center>";

if (
is_file($file)) // далее проверяем адрес вышеописанными функциями
{
$maillist file($file);
if (!
$email == '') {
if (
test_mail($email)) {
if (!
copy_mail($email))
{
$maillist[] = "\n$email";
print 
"E-mail: $email добавлен базу рассылки</center>";
}
else print 
"E-mail: $email уже есть в базе</center>";
}
else print 
"E-mail: $email не сушествует</center>";
}
else print 
"</center>";
}
else print 
"Не найден файл $file ! Пожалуйста <A HREF=\"mailto:$fromemail\">сообщите</a> мне о ошибке.</center>";
// выводи на экран форму с предложением подписки и отписки
echo "<br><center>Подписаться на рассылку<form method=\"post\" action=\"ras.php\" enctype=\"multipart/form-data\">";
echo 
"Введите mail:<input type=\"text\" name=\"email\" size=\"30\"><input type=\"submit\" name=\"submit\" value=\"подписаться\"></form></center>";

echo 
"<CENTER><br><br><form method=\"post\" action=\"ras.php\" enctype=\"multipart/form-data\">";
echo 
"Отписаться от рассылки<br>Введите mail:";
echo 
"<input type=\"text\" name=\"delmail\" size=\"15\"><input type=\"submit\" name=\"submit\" value=\"Отписаться\"></form></CENTER>";
// если пользователь решил отписаться - удаляем введеный адрес
$flag false;
$fw fopen($file"w");
for (
$i 0$i sizeof ($maillist); $i++)
if (
trim(strtolower($delmail)) == trim(strtolower($maillist[$i]))) {
if (!
$delmail == '')
{
print 
"<center>$delmail удален из базы рассылки</center>";
$flag true;
}
}
else 
fputs($fw$maillist[$i]); // введенного адреса в базе нет
fclose($fw);
if (!
$delmail == '')
if (!
$flag) print "<center>$delmail не найден в базе рассылки</center>";
?>




<?

$subject 
"Рассылка моего сайта"// тема рассылки
$fromemail "мое@мыло"// ваш адрес (для ответов)
$file "maillist.txt"// список адресов подписчиков
$password "secretpassword"// ваш пароль для рассылки

if ($pass == $password// если пароль ввели правильный
// то выводим форму с полями для ввода:
// адрес отправителя, текст письма, тело письма
// кнопку для отправления
// после нажатия на кнопку, передаем данные скрипту send.php
{
echo 
"<font size=\"-1\"><hr><form method=\"POST\" action=\"send.php\">";
echo 
"адрес отправителя<br><input type=\"text\" name=\"fromemail\" value=\"$fromemail\" size=\"25\"><br>";
echo 
"тема письма<br><input type=\"text\" name=\"subject\" value=\"$subject\" size=\"50\">";
echo 
"<br>текст письма:<br><textarea name=\"body\" rows=\"8\" cols=\"50\"></textarea>";
echo 
"<br><input type=\"submit\" value=\"Отправить сообщение\"></form></font>";
print 
"<i>В базе<b>"sizeof($maillist) ."</b> адресов</i><br><hr>";
for (
$i 0$i sizeof ($maillist); $i++) print $maillist[$i]. "<br>";
}
// если пароль неверный - просим ввести еще раз
else echo "<form method=\"POST\" action=\"ras.php\"><input type=\"password\" name=\"pass\" value=\"\"><input type=\"submit\" value=\"Управление\"></form>";

?>




<?

$odr 
"\n\n\n Для отказа от подписки воспользуйтесь ссылкой\n";
$homepage "http://адрес.сайта/ras.php";

error_reporting(0);
$subject $HTTP_POST_VARS["subject"];
$body $HTTP_POST_VARS["body"];
$subject stripslashes($subject);
$body stripslashes($body);

$file "maillist.txt";
$maillist file($file);

print 
"В базе"sizeof($maillist) ." адресов<br>";
for (
$i 0$i sizeof ($maillist); $i++)
{
#echo($maillist[$i]."<br>");
mail($maillist[$i], $subject,
$body ."$odr $homepag?delmail=$maillist[$i]",
"From: $fromemail");
}
echo 
"Готово!";

?>


И было бы не лохо... если бы вы писали что именно какие строки, заменить на ваши (переделанные для БД =)
Заранее спасибо!

   
 
 автор: Shorr Kan   (23.03.2006 в 15:49)   письмо автору
 
   для: Yanka   (23.03.2006 в 15:45)
 

Помимо ограничения на выполнение - у сервера есть и ограничение на письма в час. То есть, вы не пошлете больше энного количества. И тысячу писем - уж точно. Для этого вам в любом случае придется ставить паузу... А это затронет лимит времени выполнения. Вас устроит, если рассылка будет происходить не мгновенно, а запускаясь переодически (по крону), и рассылая часть писем?

   
 
 автор: Yanka   (23.03.2006 в 16:46)   письмо автору
 
   для: Shorr Kan   (23.03.2006 в 15:49)
 

Нет... меня крон уж никак не устраивает (я новичок в этом деле) =(
Можно сделать чтобы он писал в базу вместо файла... а при отправке база делилась на части, в каждой части по 300 эмайлов... тоесть выбираешь часть базы и отправляешь

   
Rambler's Top100
вверх

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