Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Email-рассылка по шаблону на PHP
Если Вы не хотите платить различным сервисам, типа UniSender, за рассылку писем и у вас есть свой сайт на более-менее приличном хостинге, вы можете сделать свою собственную рассылку на e-mail.
Для органиации своей e-mail рассылки нужна "база рассылки" и "программа рассылки". В качестве программы проще и удобнее использовать PHP скрипт. А базу нужно собирать из своих клиентов. Я категорически не рекомендую покупать базу для e-mail рассылок, т.к. вы очень быстро попадете в спам-лист и даже нормальные ваши клиенты не будут получать от вас писем.
Здесь я расписал рекомендации, как делать рассылки, на что обращать внимание при составлении писем. Если у вас есть своя старая база и вы хотите ее актуализировать, т.е. оставить только "живых" пользователей, используйте сервис проверки e-mail.
Данный пример создания своей рассылки на PHP уникален тем, что он без использования базы данных и каких-либо дополнительных библиотек. Вы один раз создаете свой красивый html-шаблон, на основании предложенного, загружаете из текстового файла или с помощью вставки в поле список адресов получателей, нажимаете "отправить" и вуаля! Все получили ваше письмо! Для того, чтобы избежать проблемы дешевых хостингов, которые ограничивают отправку большого кол-ва писем в минуту, в скрипте предусмотрен параметр "LIMIT_PER_MINUTES=20", т.е. скрипт будет отправлять не более 20 писем в минуту. Вы можете менять его в зависимости от ограничений вашего хостинга.
Основные возможности скрипта
- Не используется база данных
- Используется шаблон письма, вставляются {body} = тело письма, {to} = ФИО получателя, {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 Войти через Яндекс
.
Прокомментировать/Отблагодарить