Сервер рассылок на php

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Набор PHP скриптов для организации почтовых рассылок.

hijarian/mailout

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Mailout — простой программный пакет для организации почтовой рассылки

mailout преследует следующие цели:

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

Список получателей хранится в SQLite базе данных.

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

Фиксируются следующие события:

  1. Получатель открыл письмо (сработает только если получатель позволил своему почтовому клиенту загрузить изображения из письма).
  2. Получатель перешёл на главную страницу сайта по ссылке из письма.
  3. Получатель перешёл на страницу каталога товаров по ссылке из письма.
  4. Получатель отказался от рассылки.

Для сбора статистики требуется внедрение некоторого небольшого количества PHP кода непосредственно на сайт. Для осуществления собственно рассылки требуется только база получателей и шаблон письма.

  • PHP 5.3
  • PDO
  • SQLite 3
  • sendmail на сервере (требуется работоспособность функции mail )
Читайте также:  Container class in javascript

Каталог mailout должен быть размещён в корневом каталоге веб-сайта. Он должен быть доступен для чтения и записи веб-сервером.

Интеграция сбора статистики

В корневом каталоге mailout находится пять скриптов, представляющих собой фронт-энд.

  1. homepage_visit_trap.php Содержит в себе кусочек PHP кода, который следует разместить на главной странице сайта. Он фиксирует посещение получателями рассылки главной страницы.
  2. catalog_visit_trap.php Содержит в себе кусочек PHP кода, который следует разместить на странице каталога товаров. Он фиксирует посещение получателями рассылки каталога.
  3. mail_open_trap.php Эта страница должна быть целиком размещена по какому-либо доступному из Сети URL. Она фиксирует открытие получателем рассылки самого письма. Данное событие сработает только если получатель позволит своему почтовому клиенту загрузить изображения из письма.
  4. unsubscribe.php Эта страница должна быть целиком размещена по какому-либо доступному из Сети URL. Она генерирует форму отказа от рассылки для получателя.
  5. stats.php Эта страница должна быть целиком размещена по какому-либо доступному из Сети URL. Она генерирует таблицу с текущей статистикой по рассылке.

Во всех вышеперечисленных скриптах следует убедиться, что пути до бэк-энда, находящегося в файле mailout/code/RecipientsDB_WebDriver.php , актуальны.

Работа со списком получателей

Источник

Своя рассылка на PHP

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

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

Давайте разберемся, что нам для этого потребуется.

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

Читайте также:  Datetime this week php

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

Итак, в окне для ввода текста, с именем 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][-0-9a-z\.]+)\.([a-z]$)/", $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: "); > echo "Готово!";

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

Источник

Оцените статью