Email-рассылка по шаблону на PHP

Если Вы не хотите платить различным сервисам, типа UniSender, за рассылку писем и у вас есть свой сайт на более-менее приличном хостинге, вы можете сделать свою собственную рассылку на e-mail.

Для органиации своей e-mail рассылки нужна "база рассылки" и "программа рассылки". В качестве программы проще и удобнее использовать PHP скрипт. А базу нужно собирать из своих клиентов. Я категорически не рекомендую покупать базу для e-mail рассылок, т.к. вы очень быстро попадете в спам-лист и даже нормальные ваши клиенты не будут получать от вас писем.

Здесь я расписал рекомендации, как делать рассылки, на что обращать внимание при составлении писем. Если у вас есть своя старая база и вы хотите ее актуализировать, т.е. оставить только "живых" пользователей, используйте сервис проверки e-mail.

Данный пример создания своей рассылки на PHP уникален тем, что он без использования базы данных и каких-либо дополнительных библиотек. Вы один раз создаете свой красивый html-шаблон, на основании предложенного, загружаете из текстового файла или с помощью вставки в поле список адресов получателей, нажимаете "отправить" и вуаля! Все получили ваше письмо! Для того, чтобы избежать проблемы дешевых хостингов, которые ограничивают отправку большого кол-ва писем в минуту, в скрипте предусмотрен параметр "LIMIT_PER_MINUTES=20", т.е. скрипт будет отправлять не более 20 писем в минуту. Вы можете менять его в зависимости от ограничений вашего хостинга.

Основные возможности скрипта

  • Не используется база данных
  • Используется шаблон письма, вставляются {body} = тело письма, {to} = ФИО получателя, {unsubscribe} = ссылка отписки
  • Встроенный парсер данных для получения списка рассылки
  • Кодируется кириллица в заголовке и в именах отправителя/получателя
  • Добавляется адрес для ответа
  • Прописываются корректные заголовки письма для снижения риска попадания в спам






Отправитель




Для подстановки в шаблоне используйте: {to} = ФИО получателя, {body} = тело письма, {unsubscribe} = ссылка отписки


<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title>Отправить почтовое сообщение</title>
</head>

<body>
<h1>Отправить почтовое сообщение</h1>
<?
if(!empty($_FILES['file']['tmp_name'])){
  $fil=$_FILES['file']['tmp_name'];
  $to = file_get_contents($fil); if($to===false)echo '<br>Файл со списком получателей '.$fil.' не открывается, возможно неверный формат!';
  //if(!empty($_POST['fcharset'])&&$_POST['fcharset']=='windows-1251')$mes=Convert::win2utf($mes);

}elseif(!empty($_POST['to'])){
  $to = $_POST['to'];

}
define('HASH_UNSUBSCRIBE','ootHK8EE58Ni/&E$HkcR');
define('LIMIT_PER_MINUTES',20);
if(!defined('charset'))define('charset','utf-8');
$SERVER_NAME=preg_replace('/^https?:\/\//', '', str_replace(':443', '', $_SERVER['HTTP_HOST']));

$mes = isset($_POST['mes'])? $_POST['mes'] : '' ;
$subj = isset($_POST['subj']) ? $_POST['subj'] : '';
$from_name = isset($_POST['from_name']) ? $_POST['from_name'] : '';
$from_mail = isset($_POST['from']) ? $_POST['from'] : 'sales@' /*'noreply@'*/ . $SERVER_NAME;
$add_name = !empty($_POST['add_name']);
$f=__FILE__; $f=substr($f,0,-3).'html';

if (is_file($f))$f_body = file_get_contents($f);
if(!empty($to)){

  set_time_limit(1000);
  if (empty($mes)){
    echo "<p>Пустое сообщение, будет отправлен сам шаблон!</p>";
  }

  ignore_user_abort(true);
  set_time_limit(1000);

  if (!empty($_POST['from'])) $GLOBALS['from'] = $_POST['from'];
  if (!empty($f_body)){
    $body = str_ireplace("{body}", str_replace("\n", "\n", str_replace("\r", "", $mes)), $f_body);
  } else {
    echo "<p>Нет файла шаблона письма!</p>";
    if(stripos($mes, '<html>')===false){
      $mes = "<html><head><meta content=\"text/html; charset=".charset."\" http-equiv=\"Content-Type\"></head><body>\n" .
          $mes . "\n</body></html>";
    }
    $body = str_replace("\n", "<br>\n", str_replace("\r", "", $mes));    // сообщение всем
  }

  $subject = mime_header_encode($subj, charset);

  $to = preg_replace('/[ \t\r]+/', ' ', trim($to));
  $to = preg_replace('/  +/', ' ', $to);
  $ss = explode("\n", $to);
  $ret = 0; // счетчик отправленых писем

  foreach ($ss as $name)if($name){
    // цикл разбора получателей и отправки e-mail им
    // --------- здесть отсутствует часть скрипта ----------
    // формирую адрес отписку, подставляю все в шаблон
    // --------- здесть отсутствует часть скрипта ----------
      if( mail( $to, $subject, $body, $header) ){
        echo "Отправлено на <b>" . $to_name .' <' . $to_mail . '>'. "</b><br>\n";
        $ret++;
      }
      if(defined('LIMIT_PER_MINUTES') && 60>LIMIT_PER_MINUTES )sleep(60/LIMIT_PER_MINUTES);
  }
  echo "Отправлено <b>" . $ret . "</b> сообщений!<br>\n";
}

?>

  <form class="box" enctype="multipart/form-data" method="post" action="">
    <label>
      Получатели(email и имена получателей по одному в строке):<br>
      <textarea name="to" rows="10" style="width:100%"><?=(empty($_POST['to'])?'':$_POST['to'])?></textarea></label><br>

    <label>или файл с получателями: <input type="file" accept="application/*, text/*" name="file"></label><br>

    <br><label><input name="add_name" value="1" type="checkbox" checked> добавлять имена в поле получателя</label><br>

    <br><label>Отправитель имя: <input name="from_name" value="<?=$from_name?>"></label>
    <label>e-mail: <input type="email" name="from_mail" value="<?=$from_mail?>"></label><br>
    <br><label>Тема: <input type="text" name="subj" style="width:100%" value="<?=$subj?>" required></label><br>
      <?if(empty($f_body) || stripos( $f_body, "{body}")!==false ){?>
    <label>Сообщение<?=(is_file($f)?' (для вставки в <a href="'.substr($f,strlen($_SERVER['DOCUMENT_ROOT'])).'">шаблон</a>)' :
          '(шаблона письма нет)')?>: <br>
      <textarea name="mes" rows="10" style="width:100%"><?=@$mes?></textarea></label><br>
<p>Для подстановки в шаблоне используйте: {to} = ФИО получателя, {body} = тело письма, {unsubscribe} = ссылка отписки</p>
<?}elseif(!empty($f_body)){?>
  <p><a href="<?=substr($f,strlen($_SERVER['DOCUMENT_ROOT']))?>">Шаблон отправляемого письма</a> не содержит изменяемой части {body}.</p>
      <?}?>
<input type="submit" value="Отправить" class="submitR" ><br>
</form><br>

</body>
</html>

Пример простейшего шаблона письма

Данный пример шаблона письма email-рассылки основан на табличной верстке, которую понимают все почтовые клиенты. Шаблон имеет ограниченную ширину в 600 пикселей, чтобы помещаться в окно предварительного просмотра.

<html>
<head>
  <meta charset="utf-8">
  <style type="text/css">
    a{color:#0077cc;}
    ul{padding:0;font:14px Arial;margin-top:0;text-align:justify;}
    p{margin:10px 0;text-indent:20px;font:14px Arial;text-align:justify;}
  </style>
</head>
<body>
<table cellpadding='0' cellspacing='0' style='width:100%;' width='100%'>
  <tbody>
  <tr>
    <td align='center' style='padding:0 0 0 0' valign='top'>
      <table cellpadding='0' cellspacing='0' style='width:600px;border:solid 1px #3399cc;border-spacing:0' width='600px'>
        <tr><td style="background:#33ccff;padding:9px 20px;border:solid 1px #3399cc;">
            <h1 style="margin:0;font:25px Arial;color:#ffffff;">WEB-технологии</h1>
          </td></tr>
        <tr><td style="background:#fff;padding:9px 20px;color:#333;font:14px Arial;border:solid 1px #3399cc;">
            {body}
            <p style="text-align:center;font-size:50%">
              <a href="{unsubscribe}">Отписаться от рассылки</a>
            </p>
          </td></tr>
      </table>
    </td>
  </tr>
</table>
</body>
</html>

Всего за 999 рублей (~10$) Вы можете приобрести готовый скрипт рассылки, который поддерживает весь функционал.

Код скрипта реализован на PHP, полностью открытый и не использует никаких дополнительных библиотек.

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

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

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

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


.