PHP

Универсальная рассылка почты на PHP

Этот пример позволяет отправить почту по списку получателей, заданному в виде MySQL базы или по списку введенному в текстовое поле. Очень полезно для раззылки прайс-листов или приглашений на мероприятия, или информаирования о новых акциях.

Особенности скрипта рассылки почты:
Рассылка может осуществляться:
Всем
Подтвердившим почту
Согласным на рассылку
Не подтвердившим почту
Админам
Не заходившим более 2х месяцев
Только мне (для проверки)
По текстовому списку1, список получателей задается в формате: "Мыло Имя" или "Имя <Мыло>", каждый получатель с новой строки.
Подстановка по шаблону имени получателя. {to} заменяется на ФИО.
Сохранение и автовосстановление последнего сообщения1
Задания адреса отправителя
Вложение файла в сообщение1

Кому:
От:
Тема:
Сообщение:
СкрепкаФайл для вложения(<1Мб):

Во избежании злоупотреблений и рассылки спама сообщения из этого примера не отправляются!

Шаблоны:
{to} - ФИО.
<?php
mysql_connect("localhost", "root", "database"); 

if(isset($_POST[&apos;mes&apos;])){
   set_time_limit(1000);
   $mes= $_POST[&apos;mes&apos;];
   $subj=$_POST[&apos;subj&apos;];
   if (empty($mes))die("Пустое сообщение!");
   $for=intval($_POST[&apos;for&apos;]);
   if($for==0)$add=&apos;&apos;;    // Всем
   elseif($for==1)$add=&apos;WHERE adm>0&apos;;    // Подтвердившим почту
   elseif($for==2)$add=&apos;WHERE adm>0 and rss>0&apos;;    // Согласным на рассылку
   elseif($for==3)$add=&apos;WHERE mail_ok=0&apos;;    // Не подтвердившим почту
   elseif($for==4)$add=&apos;WHERE adm=9&apos;;    // Админам
   elseif($for==5)$add="WHERE time<&apos;".date("Y-m-d H:i:s",time()-60*60*24*30*2)."&apos;";    // Не заходившим более 2х месяцев
   elseif($for==6)$add=&apos;WHERE id=1&apos;;    // мне
   else die("Не выбрана категория получателей!");

   $from=$_POST[&apos;from&apos;];
   $body="<html><body>\n".str_replace("\n","<br>\n",str_replace("\r","",$mes))."\n</body></html>";    // сообщение всем
   $from="From: <".$from.">\nContent-Type: text/html; charset=windows-1251";
   $query = mysql_query(&apos;SELECT * FROM &apos;.db_prefix.&apos;users &apos;.$add);
   $ret=0;
   while ($user=mysql_fetch_assoc($query)){
        $body1=str_replace(&apos;{to}&apos;, $user[&apos;name&apos;], $body);
       if(mail(trim($user[&apos;mail&apos;]), $subj, $body1, $from))
        {echo "Отправлено на <b>".$user[&apos;mail&apos;]."</b><br>\n"; $ret++;}}
   echo "Отправлено <b>".$ret."</b> сообщений!<br>\n";
}
?>

<form method="post" enctype="multipart/form-data" class="box" onsubmit=&apos;document.getElementById("sbt").disabled=true;&apos;>
<select name=&apos;for&apos;
    onChange=&apos;document.getElementById("to").style.display=this.options[this.selectedIndex].value=="10"?"block":"none"&apos;>
<option value="0">Всем</option>
<option value="1">Подтвердившим почту</option>
<option value="2">Согласным на рассылку</option>
<option value="3">Не подтвердившим почту</option>
<option value="4">Админам</option>
<option value="5">Не заходившим более 2х месяцев</option>
<option value="6" selected>Только мне</option>
<option value="10">Список получателей</option>
</select><br>
<div id=&apos;to&apos; style=&apos;display:none&apos;>Кому: <textarea name="to" rows="10" style="width:100%"></textarea></div>

От: <input name="from" VALUE="" style="width:100%" /><br>
Тема: <input type=text name="subj" style="width:100%" value="" /><br>

Сообщение:
<textarea name="mes" rows="5" style="width:100%"></textarea><br>
<input name=&apos;MAX_FILE_SIZE&apos; type=&apos;hidden&apos; value=&apos;1000000&apos;>
Файл для вложения(<1Мб): <input type=&apos;file&apos; name=&apos;f&apos; size=45>

<INPUT id="sbt" TYPE="SUBMIT" VALUE="Отправить" class="submitL" /><br>
</form>

<br><p>Шаблоны:<br>
{to} - ФИО.<br>
Список получателей задается в формате:<br>
"Мыло Имя"<br>или<br>Имя <Мыло> или только "Мыло"<br>

<br clear="all">
?>

Создание базы данных пользователей:
mysql_query(&apos;CREATE TABLE IF NOT EXISTS users (
		id INT UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT,
		name CHAR(12) NOT NULL,
		pass CHAR(32) NOT NULL,
		ip INT(10) UNSIGNED NOT NULL DEFAULT 0,
		mail CHAR(32) NOT NULL,
		mail_ok TINYINT UNSIGNED NOT NULL DEFAULT 0,
		rss TINYINT UNSIGNED NOT NULL DEFAULT 0,
		adm TINYINT UNSIGNED NOT NULL DEFAULT 0,
		uid INT UNSIGNED NOT NULL,
		log VARCHAR(12) NOT NULL,
		time DATETIME,
		tel VARCHAR(32) NOT NULL,
		PRIMARY KEY (name)
		) DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin&apos;);
Добавлено: 31 Декабря 2014 14:10:28 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...