Php скрипт для массовой отправки почты. Почтовая рассылка на PHP и MySQL

В интернете есть много бесплатных сервисов. В том числе и услуги по рассылке писем подписчикам. Некоторые из них очень хороши. Но раз уж они бесплатны, значит тут же в письмах появляется реклама. Да и немалые формы для подписки с логотипом представителя услуг многих не устраивают.

Так почему бы не написать простенький движок для своей рассылки и отсылать письма своими силами?

Давайте разберемся, что нам для этого потребуется. Для того чтоб посетители имели возможность подписаться на вашу рассылку необходима форма для ввода адреса электронной почты. После ввода адрес надо запомнить. Давайте адреса будем сохранять в файле maillist.txt по одному адресу в строчке. После того как адрес будет сохранен, давайте выведем соответствующее сообщение и отобразим форму для подписки еще одного адреса или удаления существующего. Вот собственно почти и все. Осталось добавить только возможность отправки писем. Для безопастности, давайте на возможность отправки писем поставим пароль - необходима форма для ввода пароля. Далие потребуются формы для заполнения адреса отправителя и темы, а также для самого текста. Ну и, наконец, сам скрипт, который будет отсылать письма. А теперь все по порядку.

Форма для ввода адреса электронной почты будет состоять только из окна для ввода адреса и кнопки для подтверждения:


Итак, в окне для ввода текста, с именем email и видимой длиной в 30 символов, будет вводиться адрес электронной почты. После нажатия на кнопку с надписью подписаться, адрес будет передан скрипту ras.php для занесения в базу рассылки.

Далее давайте рассмотрим скрипт ras.php который будет сохранять адрес почты в файле, выводить сообщение о результате и формы для подписки и отписки. Скрипт можно исполнить совсем просто - сохранить адрес, вывести соответствующее сообщение. Но могут возникнуть проблемы: кто-то может случайно подписаться несколько раз, кто-то может допустить опечатку и ввести в поле адреса недопустимый символ. В таком случае база рассылки будет загрязняться, а неверные адреса станут приводить к ошибкам в работе скрипта. Вывод ясен - перед сохранением адреса следует проверить его на соответствие стандартам имен адресов электронных почтовых ящиков, а также на наличие в базе рассылки. Для того чтоб не рассматривать код по частям, я дам комментарии в самом коде:

$file = "maillist.txt"; // файл, содержащий адреса error_reporting(0); // запрещаем вывод сообщений о возможных ошибках function test_mail($char) // функция, проверяющая реальность адреса { if (preg_match("/^[_\.0-9a-z-]+@([-0-9a-z\.]+)\.({2,3}$)/", $char)) return true; return false; } // получаем введеный в форму адрес с символами в нижнем регистре $email = trim(strtolower($email)); function copy_mail($char) // проверяем, есть ли такой адрес в базе { global $file; $list = file($file); for ($i = 0; $i < sizeof ($list); $i++) if ($char == trim($list[$i])) return true; return false; } echo "

"; if (is_file($file)) // далее проверяем адрес вышеописаными функциями { $maillist = file($file); if (!$email == "") { if (test_mail($email)) { if (!copy_mail($email)) { $maillist = "\n$email"; print "E-mail: $email добавлен базу рассылки
"; } else print "E-mail: $email уже есть в базе"; } else print "E-mail: $email не сушествует"; } else print ""; } else print "Не найден файл $file ! Пожалуйста сообщите мне о ошибке."; // выводим на экран форму с предложением подписки и отписки echo "
Подписаться на рассылку
"; echo "Введите mail:
"; echo "


"; echo "Отписаться от рассылки
Введите mail:"; echo "
"; // если пользователь решил отписаться - удаляем введеный адрес $flag = false; $fw = fopen($file, "w"); for ($i = 0; $i < sizeof ($maillist); $i++) if (trim(strtolower($delmail)) == trim(strtolower($maillist[$i]))) { if (!$delmail == "") { print "
$delmail удален из базы рассылки
"; $flag = true; } } else fputs($fw, $maillist[$i]); // введеного адреса в базе нет fclose($fw); if (!$delmail == "") if (!$flag) print "
$delmail не найден в базе рассылки
";

Вот наш код сохранения и удаления адресов готов. Теперь надо позаботится о средствах отправки почты. Не будем же мы через Outlook отсылать!?. Как уже говорилось, защитим возможность отправки паролем, который будем вводить на специальной форме:


Поле для ввода с именем pass и будет служить для ввода пароля. После нажатия на кнопку с надписью войти, пароль будет передан скрипту out.php:

$subject = "Рассылка моего сайта"; // тема рассылки $fromemail = "мое@мыло"; // ваш адрес (для ответов) $file = "maillist.txt"; // список адресов подписчиков $password = "secretpassword"; // ваш пароль для рассылки if ($_POST["pass"] == $password) // если пароль ввели правильный // то выводим форму с полями для ввода: // адрес отправителя, текст письма, тело письма // кнопку для отправления // после нажатия на кнопку, передаем данные скрипту send.php { echo "


"; echo "адрес отправителя

"; echo "тема письма
"; echo "
текст письма:
"; echo "
"; print "В базе". sizeof($maillist) ." адресов

"; for ($i = 0; $i < sizeof ($maillist); $i++) print $maillist[$i]. "
"; } // если пароль неверный - просим ввести еще раз else echo "
";

Осталось рассмотреть только один скрипт - тот самый, который будет отсылать почту:

$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) ." адресов
"; for ($i = 0; $i < sizeof ($maillist); $i++) { #echo($maillist[$i]."
"); mail($maillist[$i], $subject, $body ."$odr $homepag?delmail=$maillist[$i]", "From: <$fromemail>"); } echo "Готово!";

Тут все просто: получаем значения, введенные в предыдущюю форму и в цикле отправляем их по очереди на каждый из адресов.

Copyright by Владислав Путяк http://ru-coding.com/ . Изменения и дополнения

В интернете есть много бесплатных сервисов. В том числе и услуги по рассылке писем подписчикам. Некоторые из них очень хороши. Но раз уж они бесплатны, значит тут же в письмах появляется реклама. Да и немалые формы для подписки с логотипом представителя услуг многих не устраивают.

Так почему бы не написать простенький движок для своей рассылки и отсылать письма своими силами?

Давайте разберемся, что нам для этого потребуется. Для того чтоб посетители имели возможность подписаться на вашу рассылку необходима форма для ввода адреса электронной почты. После ввода адрес надо запомнить. Давайте адреса будем сохранять в файле maillist.txt по одному адресу в строчке. После того как адрес будет сохранен, давайте выведем соответствующее сообщение и отобразим форму для подписки еще одного адреса или удаления существующего. Вот собственно почти и все. Осталось добавить только возможность отправки писем. Для безопасности, давайте на возможность отправки писем поставим пароль - необходима форма для ввода пароля. Далее потребуются формы для заполнения адреса отправителя и темы, а также для самого текста. Ну и, наконец, сам скрипт, который будет отсылать письма. А теперь все по порядку.

Форма для ввода адреса электронной почты будет состоять только из окна для ввода адреса и кнопки для подтверждения:



Итак, в окне для ввода текста, с именем email и видимой длиной в 30 символов, будет вводиться адрес электронной почты. После нажатия на кнопку с надписью подписаться, адрес будет передан скрипту ras.php для занесения в базу рассылки.

Далее давайте рассмотрим скрипт ras.php который будет сохранять адрес почты в файле, выводить сообщение о результате и формы для подписки и отписки. Скрипт можно исполнить совсем просто - сохранить адрес, вывести соответствующее сообщение. Но могут возникнуть проблемы: кто-то может случайно подписаться несколько раз, кто-то может допустить опечатку и внесли в поле адреса недопустимый символ или нарочно ввести белиберду. В таком случае база рассылки будет загрязняться, а неверные адреса станут приводить к ошибкам в работе скрипта. Вывод ясен - перед сохранением адреса следует проверить его на соответствие стандартам имен адресов электронных почтовых ящиков, а также на наличие в базе рассылки. Для того чтоб не рассматривать код по частям, я дам комментарии в самом коде:

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

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

Function test_mail($char ) // функция, проверяющая реальность адреса
{
$flag = false ;
if(eregi("^[_\.0-9a-z-]+@([-0-9a-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 "

";

If (is_file($file )) // далие проверяем адрес вышеописаными функциями
{
$maillist = file($file );
if (!$email == "") {
if (test_mail($email )) {
if (!copy_mail($email ))
{
$maillist = "\n$email ";
print "E-mail: $email добавлен базу рассылки

";
}
else print "E-mail: $email уже есть в базе";
}
else print "E-mail: $email не сушествует";
}
else print "";
}
else print "Не найден файл $file ! Пожалуйста сообщите мне о ошибке.";
// выводи на екран форму с предложением подписки и отписки
echo "
Подписаться на рассылку
";
echo "Введите mail:
";

Echo "



";
echo "Отписаться от рассылки
Введите mail:";
echo "
";
// если пользователь решил отписаться - удаляем введеный адрес
$flag = false ;
$fw = fopen($file , "w ");
for ($i = 0; $i < sizeof ($maillist ); $i++ )
if (trim(strtolower($delmail )) == trim(strtolower($maillist [$i ]))) {
if (!$delmail == "")
{
print "
$delmail удален из базы рассылки
";
$flag = true ;
}
}
else fputs($fw , $maillist [$i ]); // введеного адреса в базе нет
fclose($fw );
if (!$delmail == "")
if (!$flag ) print "
$delmail не найден в базе рассылки
";
?>

Вот наш код сохранения и удаления адресов готов. Теперь надо позаботится о средствах отправки почты. Не будем же мы через Аутлук отсылать?. Как уже говорилось, защитим возможность отправки паролем, который будем вводить на специальной форме:




Поле для ввода с именем pass и будет служить для ввода пароля. После нажатия на кнопку с надписью войти, пароль будет передан скрипту out.php :

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

if ($pass == $password ) // если пароль ввели правильный
// то выводим форму с полями для ввода:
// адрес отправителя, текст письма, тело письма
// кнопку для отправления
// после нажатия на кнопку, передаем данные скрипту
send.php
{
echo "
";
echo "адрес отправителя

";
echo "тема письма
";
echo "
текст письма:
";
echo "
";
print "В базе". sizeof($maillist) ." адресов

";
for ($i = 0; $i < sizeof ($maillist ); $i ++) print $maillist [$i ]. "
";
}
// если пароль неверный - просим ввести еще раз
else echo "
";

Осталось рассмотреть только один скрипт - тот самый, который будет отсылать почту:

$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 ) ." адресов
";
for ($i = 0; $i < sizeof ($maillist ); $i ++)
{
#echo($maillist [$i ]."
");
mail($maillist [$i ], $subject ,
$body ."$odr $homepag ?delmail=$maillist [$i ]",
"From: $fromemail ");
}
echo "Готово!";

Тут все просто: получаем значения, введенные в предыдущею форму и в цикле отправляем их по очереди на каждый из адресов.

Вот совсем и несложно! Теперь вы имеете мощный инструмент по ведению полностью собственной рассылки. Нет больше для вас никаких правил. Что хотите то и пишите в своей рассылке. Полная свобода по конфигурации и внешнему виду форм для подписки.

Разумеется, данный код является лишь минимальным набором. Например, с помощью функции mail можно организовать себе извещение о новом подписчике, а подписчику о удачной регистрации, рассказать побольше о рассылке.

Разумеется, говоря о полной свободе, я не в коем случае не имел в виду принудительную подписку? или, проще говоря, спам. Если вдруг кто решит рассылать спам таким образом, то пусть учтет что на него сразу начнут жаловаться администрации хостинга. И неважно платный хостинг или нет, если администрация хостинга заметит подобные действия, она аннулирует предоставление своих услуг вам без возмещения убытков. А с халявиными хостингами еще туже. Во-первых, надо просить персональное разрешения у администрации на открытие данной функции, во-вторых, как правило, стоит лимит в 1 письмо за минуту. Так что господа спамеры, обломайтесь:)

На такой вот веселой ноте и закончим.




Есть еще вопросы или что-то непонятно - добро пожаловать на наш

В прошлый раз мы рассмотрели вариант как прямо с сайта. Данный вариант подходит для отправки одного письма.

А для администратора сайта очень часто требуется сделать оповещение о какой-нибудь новости или событии для всех пользователей сайта, а для этого требуется сделать массовую рассылку. И очень важно, чтобы каждый получил индивидуальное письмо, адресованное именно ему. Значит в каждое письмо должно быть вставлено уникальное имя и адрес.

Чтобы сделать такую рассылку, нужно спросить об этом администратора хостинга, на котором установлен сайт. Рассылка без разрешения может повлечь за собой блокировку вашего аккаунта. Независимо оплатили ли вы хостинг на месяц или год. Скажу сразу, что на семидесяти процентах всех хостингов вам могут категорически отказать. На остальных могут разрешить, но с ограничениями. Это может быть в лучшем случае пятьсот писем в час или в сутки, или в худшем сто писем в сутки. Все зависит от тарифа и самого хостинга.

А если вы занимаетесь этим профессионально и всерьез, а денег, естественно, маловато, то для начала понадобится выделенный сервер VPS. Но не думайте, что вы там можете отправлять сколько угодно. Все равно нужно сказать администратору хостинга, что вам нужно отправить сообщение пользователям сайта, что каждый дал согласие на получение от вас писем. И вообще база пользователей абсолютно белая и ни на каком черном рынке вы эту базу не покупали.

Ну, думаю письмо администратору хостинга вы уже написали. Получили от него “добро” и доказали ему, что база e-mail у вас абсолютно белая и пушистая.

Прекрасно. Теперь приступаем к технической стороне вопроса. Отправлять письма мы будем цикле while обычной функцией mail();
База e-mail и имя каждого пользователя у нас есть. Значит мы делаем запрос к базе users при помощи выражения mysql_query(“SELECT * FROM `users`”);

А общий код скрипта следующий:

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

А, нужно иметь в виду следующие условия:

Вот примерно небольшой список того, что требуется для массовой рассылки писем. Но это не все рекомендации, потому что правило игры постоянно меняются. И правило для распознавания спама тоже меняются почти каждый год. Потому что в сети более 200 миллионов e-mail-адресов только по России. Каждый мечтает получить от каждого адресата email хотя бы один рубль.

Но потом пришла в голову идея, как можно сэкономить на рассылке почты подписчикам. О том, как делается PHP Email рассылка, и с какими подводными камнями прийдется столкнуться пойдет речь в этой статье.

Как создается PHP Email рассылка?

PHP - универсальный язык, у него даже есть встроенная функция отправки почты mail, которая отправляет письма через sendmail или другую утилиту хостинга (зависит от конфигурации хостинга). И тут вопрос стоит в количестве писем. Как функция mail, так и утилиты хостинга работают достаточно медленно. Отправляя по одному письму в 30 секунд далеко не уедешь с базой клиентов 20000. Есть алтернативы, например, можно использовать SwiftMailer - целый компонент из классов на PHP, который позволяет отправлять письма с полным фаршем (вложениями, подписями и всеми доступными плюшками).

Но всегда есть подводные камни.

  1. Лимиты на количество отправок - все хостинги ставят ограничения на отправку исходящей почты из аккаунта клиента в 100-500 писем в день (этого должно быть достаточно для обычной переписки, но ограничивает возможности рассылки нежелательных писем, и значит защищает хостинг от пападения в спам-списки). Такие лимиты помешают вам отправить рассылку при помощи функции mail PHP.
  2. Лимиты почтовых провайдеров - если вы решили использовать SwiftMailer или другой компонент по отправке почты, то скорее всего ради того, чтобы использовать для отправки почтовые сервера почтовых провайдеров (Gmail, Yandex, Mail.ru). SwiftMailer и др. принимают креденшалы внешнего SMTP сервера и отправляют письмо прямо от них. И вот тут срабатывает гибкая система защиты уже со стороны почтового провайдера, он выражает подозрение в рассылке нежелательных писем (даже если они желательные) и блокирует отправку писем.

Есть альтернатива, PHP Email рассылка с VDS

Как видите, эти ограничения сильно портят шансы сделать рассылку на PHP. Выходом может стать аренда виртуального сервера. Там нет таких лимитов, что описаны ранее (вообще лимиты конечно есть, но они включаются только при поступлении провайдеру жалоб на ваш IP адрес).

Итак, у вас есть виртуальный сервер, на нем настроен sendmail или smtp сервер, у него есть свой IP адрес. Используем отправку через php mail или Swiftmailer, отправляем письма. Но будьте внимательны, отправка происходит с одного и того же IP адреса. То есть рано или поздно этот IP адрес попадет хотябы в один спам-список, и письма начнут падать в папку СПАМ у получателей.

Что можно сделать ещё?

Обязательно нужно подтвердить, что вы не просто так, вы реальный отправитель. Для этого нужно проставить DKIM и SPF записи в настройки домена отправителя, и прикрепить dkim подпись к письму. Это небольшое зашифрованное чудовище добавляется к исходящим письмам и говорит почтовой службе получателя, что все отправлено по честному, без хакерства. Такие подписи умеет вставлять SwiftMailer. Это также немного повысит фактор доставки почты. О том как настроить SPF и DKIM читайте в следующих статьях.

Приветствую Вас дорогие друзья!
В прошлой статье я немного останавливался на горячем вопросе собственный сервис рассылок или скрипт рассылки. Тема действительно горячая, т.к. Smartresponder прекращает свою деятельность и большинство интернет пользователей ищет замену. Равных Smartresponder, к сожалению, нет и вероятно не будет! Рассылка или, как модно сейчас называть, Email-маркетинг – самый эффективный инструмент ведения бизнеса. Если более просто, то нельзя продвигать какой-либо бренд без сбора людей, кому интересна Ваша тема, без рассылки. Чтобы собирать аудиторию заинтересованных и вести их по теме, нужен сервис почтовых рассылок, сервис для массовой рассылки писем. В прошлой статье, точнее в ролике я показал и сделал маленький обзор площадок, которые предлагают свои услуги по рассылке. Предложений много и ВОТ ЗДЕСЬ начинается головоломка и особенно у начинающих. Ценники высокие, а там, где цена более-менее доступная – масса неудобств. Порой сервисы скрывают реальную стоимость, т.е. заявляют низкие тарифы и пытаются тем самым привлечь большее количество пользователей с дальнейшей целью раскрутить на деньги. И так, действие первое: Вы повелись на дешевизну или другое выгодное предложение.

Открываете аккаунт, переносите базу, переделываете все страницы захвата, исправляете ссылки в статьях на своих сайтах, редактируете по возможности все записи, продукты, где были формы (ссылки) на подписку. Одним словом, проделываете адскую работу. Вы ввязались в работу с новой почтовой площадкой и тут начинается самое интересное. Действие второе: сервис почтовой рассылки, проводя рекламную компанию рассчитывает на незнания и невнимательность пользователей интернет. Вы отправляете письмо по базе, готовите второе… Оказывается, Вы уже не можете разослать второе послание в виду того, что Ваш тарифный план уже исчерпал свои возможности. Оказывается, что в описании тарифного плана очень мелко было написано количество возможного отправления писем. Под дешевизной скрываются именно ограничения отправок или лимит писем. Чтобы отправить очередное письмо, Вам необходимо докупить число отправок, а это уже непредвиденные расходы. В итоге Вас очередной раз поимели. Лично ч не смог найти достойный сервис почтовых рассылки: или ценник, или функционал с набором инструмента, или английский язык, или ручная модерация каждого письма, или …. Но самое опасное – возможность просто лишиться базы, которую долго и упорно собирал.
Давно задумывался над темой «собственный сервис рассылок». Пока был Смарт, тема сильно не грела. Стал искать скрипты. Начал с BOX-MAIL, потом Выхухоль или почтовый Дятел, попробовал парочку плагинов. НО, поработав понял, что создать собственный сервис рассылок на обычном хостинге не реально. Вы знаете, что активизировалась работа СПАМеров и в интернет появилась масса вещей, которая препятствует этой незаконной деятельности. От этого страдают в первую очередь добросовестные люди, которые на законных основаниях пытаются вести рассылку по законно собранной базе. Провайдеры ввели квоты на почтовый трафик. 100-500 писем в день не могут обеспечить массовую рассылку писем. Отправка Вашей «срочной новости» может занять довольно приличное время, т.е. Ваша новость для конца списка Вашего подписного листа уже будет не актуальна! Вывод (мое мнение) – массовая рассылка с обычных хостингов не актуальна. Вот тут вспомнил про скрипт MailWizz, который ко мне попал несколько лет назад и даже тестировал его. Но тогда был Смарт! Стоимость выделенных серверов тогда была довольно высока – работы были сначала приостановлены, а потом вообще про существование скрипта просто забыл. Вспомнил только тогда, когда жизнь наступила на горло. Пришлось потратить время на сбор информации. Особенности Нашего бизнеса – окутать что-то полезное тайной. Кроме обзора панели, найти ничего не удалось. Сам скрипт на английском – нужен был руссификатор. Опыт есть, знаний достаточно – проблема решилась. И вот сервис собственной рассылки настроен и уже работает. Как он работает, лучше посмотреть ролик:


И так преимущества собственного сервиса рассылок:

— независимость и вытекающая возможность быть хозяином положения. Хочу отправляю, хочу не отправляю.
— неограниченное число писем
— прекрасный набор инструмента


— простота работы и удобная панель навигации


— простая установка и легкость настройки
— экономия. Заплатил раз и пользуешься всю жизнь.

Каждый делает сам свой выбор. Главное – не нужно забывать, что база – это ВСЁ! Что наш заработок зависит от подписного листа – Чем больше подписчиков, тем больше мы зарабатываем. Тема или ниша нашей деятельности при этом не влияет на первостепенность наличия базы.

Последние материалы раздела:

Как включить интернет на компьютере, используя мобильный телефон
Как включить интернет на компьютере, используя мобильный телефон

Инструкции по использованию интернета от телефона на Android на компьютере по USB приведены в порядке возрастания сложности применения. Так что...

Смартфон Samsung Galaxy J5 Prime: характеристики, обзор, отзывы Технические характеристики самсунг j5 prime
Смартфон Samsung Galaxy J5 Prime: характеристики, обзор, отзывы Технические характеристики самсунг j5 prime

Информация о марке, модели и альтернативных названиях конкретного устройства, если таковые имеются. ДизайнИнформация о размерах и весе устройства,...

Почему не включается блок питания
Почему не включается блок питания

Прислал юрий11112222 - Схемотехника блоков питания: ATX-350WP4 Схемотехника блоков питания: ATX-350WP4 В статье предлагается информация о...