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

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

Особенности скрипта рассылки почты:

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

Шаблоны:
{to} - ФИО.

<?
mysql_connect("localhost", "root", "database");

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

   $from=$_POST['from'];
   $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('SELECT * FROM '.db_prefix.'users '.$add);
   $ret=0;
   while ($user=mysql_fetch_assoc($query)){
        $body1=str_replace('{to}', $user['name'], $body);
       if(mail(trim($user['mail']), $subj, $body1, $from))
        {echo "Отправлено на <b>".$user['mail']."</b><br>\n"; $ret++;}}
   echo "Отправлено <b>".$ret."</b> сообщений!<br>\n";
}
?>

<form method="post" enctype="multipart/form-data" class="box" onsubmit='document.getElementById("sbt").disabled=true;'>
<select name='for'
    onChange='document.getElementById("to").style.display=this.options[this.selectedIndex].value=="10"?"block":"none"'>
<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='to' style='display:none'>Кому: <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='MAX_FILE_SIZE' type='hidden' value='1000000'>
Файл для вложения(<1Мб): <input type='file' name='f' size=45>

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

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

<br clear="all">

Создание базы данных пользователей:

mysql_query('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');

1 В представленной версии скрипта этот функционал не реализован. Вы можете дописать его сами, используя примеры Вложение файла в почтовое сообщение

Для (загрузки) импорта e-mail адресов из текстового файла в базу данных Вы можете воспользоваться скриптом Загрузка данных клиентов из неформатированного текстового(excel, csv) файла в базу данных на PHP.

Всего за 590 рублей (~6$) Вы можете приобрести готовый скрипт рассылки, который поддерживает весь функционал. Код скрипта реализован на PHP, полностью открытый и не использует никаких дополнительных библиотек.

Соглашение по использованию платной версии:

  • Вы можете использовать полученный код в любых своих разработках, вы не обязаны указывать ссылку на источник.
  • Вы НЕ имеете права перепродавать её, размещать в свободном или ограниченном доступе, а также публиковать в любом виде.
  • Все остальные права сохраняются за автором.

Регистрация Войти Войти через VK Войти через FB Войти через Google Войти через Яндекс

При нажатии кнопки Оплатить и загрузить, Вы подтверждаете согласие с условиями использования скрипта, описанными на этой странице.
Вы будете перенаправлены на страницу выбора способа оплаты, после оплаты 590 рублей (~6$) начнется загрузка файла.
Чтобы мы не потеряли Вашу оплату при потере соединения, укажите Ваш действующий
адрес электронной почты
Сомневаетесь? Вы всегда сможете задать вопросы и получить помощь.


.