PHP Скрипт отложенной рассылки писем. Почтовая рассылка на PHP и MySQL Удобный WYSIWYG редактор

PHP Newsletter – это инструмент email- маркетолога для организации E-mail рассылок с Вашего сайта, любой информации. Скрипт удобен в использовании, прост в установке, универсален в настройке и с минимальными требованиями по хостингу. PHP Newsletter написан на PHP , имеет множество полезных функций и возможностей, такие как создание списка рассылок с сортировкой по категориям, визуальный редактор шаблонов писем, рассылка писем с вложением, рассылка через SMTP сервер, импорт/экспорт базы электронных адресов почты, управление подписчиками, автореспондер рассылки, статистика по рассылке и многое другое для email-маркетолога.
Требование

PHP 5.3 и выше
- База данных MySQL 4.1 и выше
- Mail()
- Iconv
- MB String
- Zip

Возможности

PHP Newsletter имеет все необходимое для создания, рассылки и отслеживания E-mail рассылок. Включает в себя функции:

  • Удобный WYSIWYG редактор

Встроенный WYSIWYG редактор позволяет создавать и редактировать шаблоны писем. Вы можете форматировать текст, загружать и вставлять изображения, добавлять ссылки и многое другое.

  • Рассылка писем чере smtp сервер, mail() и sendmail

PHP Newsletter может производить рассылку писем как через стандартную php функцию mail(), так через smtp сервер, используя сокеты или агентов передачи почты sendmail;

  • Автореспондер

Вы можете формировать списки рассылок, которые далее будут автоматически рассылаться в заданном порядке по расписанию. Всё, что вам нужно, это настроить крон и создать список рассылки.

  • Форма подписки на рассылку с возможностью отписки

PHP Newsletter позволяет вам создавать формы для подписки и отписки на рассылку. Форму вы можете добавить на свой сайт, для этого разместите html код формы у себя на сайте.

  • Выбор формата рассылки (plain и html)

Вы можете создавая привлекательные HTML письма или обычные текстовые сообщения электронной почты с помощью встроенного редактора шаблона писем.

  • Поддержка большинства известных кодировок

PHP Newsletter поддерживает свыше 35 различных национальных кодировок.

  • Добавление и отправление вложения

Скрипт включает в себя полную поддержку для загрузки и отправки вложений.

  • Добавление в рассылку стандартных заголовков Precedence(bulk, junk или list) и list-unsubscribe

Для исключения попадания ваших писем в спам, рекомендуется в почтовых рассылках добавлять заголовки Precedence (bulk, junk или list) и list-unsubscribe.

  • Добавление DKIM подписи в заголовок письма

Для повышения качества классификации и идентификации легитимной электронной почты, средства PHP Newsletter позволяет добавлять DKIM -подпись (технология удостоверения подлинности отправителя письма при помощи добавления цифровой подписи, связанной с именем домена) в заголовки отправляемых писем.

  • Персонализация писем

Персонализация писем - это один из самых эффективных способов произвести хорошее первое впечатление на получателя рассылки, потому что по статистике персонализированные письма чаще открываются и прочитываются. Добавить в шаблон письма тег NAME и оно автоматически будет заменяться на имя подписчика.

  • Создание неограниченного списка рассылки
  • Управление списком подписчиков

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

  • Импорт/экспорт адресов электронной почты

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

  • Журнал рассылки

По каждой рассылке введется подробная статистика по количеству отправленных и неотправленных писем. Также вы можете получить информацию, сколько пользователей открыло письма. Кроме этого, Вы можете экспортировать статистику в MS Excel файл.

  • Веб интерфейс с администратора

Для работы и управление рассылкой, Вам предоставляется удобная и достаточно простая в работе панель администратора, доступная через веб интерфейс. Большое количество настроек позволит вам быстро "заточить" систему по ваши требования.

  • Мастер установки

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

Нововведения версии 4.1.x

Установка

  • Распакуйте дистрибутив в любой каталог вашего веб-сайта, например, в "/phpnewsletter" Можно устанавливать в корень;
  • Запустите мастер установки, для этого наберите в браузере: http://ваш_сайт/пака_с_скриптом/install/;
  • После процедуры инсталляции удалите каталог "/phpnewsletter/install/".

*Если по каким-либо причинам Вам не удалось произвести установку из мастера установки, Вы можете установить скрипт вручную.

  • Разместите таблицы базы данных MySQL SQL -запроса из файла dump.sql. Это проще сделать посредством web-интерфейса, например через phpMyAdmin, который предоставляется большинством хостинг провайдерами.

После того, как Вы разместили таблицы в базе данных, откройте в любом текстовом редакторе файл config/default.config.php и пропишите параметры подключения к базе данных MySQL. где $PNSL["config"]["db"]["host"] – адрес сервера MySQL, $PNSL["config"]["db"]["name"] – имя базы данных, $PNSL["config"]["db"]["user"] – имя пользователя, $PNSL["config"]["db"]["passwd"] – пароль. Сохраните под именем config.php Для входа в админку введите пароль 1111

Настройка

  • Добавить на web-страницу форму подписки на рассылку
$url = "http://ваш_сайт/phpnewsletter/?task=subform""; $get_content = file($url); $get_content = implode($get_content, "\r\n"); preg_match("/
(.*)<\/div>/isU", $get_content, $out); echo $out;
  • Для обычных статических веб страниц, вставте html код:
Имя
E-mail
  • Настройка рассылки через smtp сервер

Для того, чтобы отправлять рассылку через smtp сервер выполните следующие ниже действия. Зайдите в панель администратора, далее в раздел "Настройки" и в кладке "SMTP сервера укажите smtp сервер, логин, пароль и порт smtp сервера (по-умолчанию 25). Выберите "Способ отправки" – SMTP сервер.

  • Настройка отправки писем через Mail.ru

E-mail администратора: [email protected]
Логин почтового ящика: [email protected]
Пароль: qwerty
smtp сервер: smtp.mail.ru
Порт smtp сервера: 25
Метод аутентификации: LOGIN

  • Настройка отправки писем через Gmail

E-mail администратора: [email protected]
Логин почтового ящика: [email protected]
Пароль: qwerty
smtp сервер: smtp.gmail.com
Порт smtp сервера: 465

Метод аутентификации: LOGIN
Способ отправки: SMTP сервер

  • Настройка отправки писем через почту Яндекс

E-mail администратора: [email protected]
Логин почтового ящика: vasyapupkin
Пароль: qwerty
smtp сервер: smtp.yandex.ru
Порт smtp сервера: 465
Подключаться через безопасное соединение (SSL ): Да
Метод аутентификации: LOGIN
Способ отправки: SMTP сервер
Добавить DKIM подпись

Для начала, Вам нужно сгенерировать DKIM ключ. Воспользуемся онлайн сервисом http://dkim.worxware.com/createkeys.php

В поле "Domain" указываете Ваш домен, а в поле "Identity" указываете адрес электронной почты, который Вы указали настройках PHP Newsletter, в "E-mail". После того, как Вы заполнили все поля формы, кликаем на кнопку "Submit" После чего, должна появляется ссылка на zip архив. Кликаем по этой ссылке, чтобы скачать архив себе на компьютер, а затем распаковываем его. В нём должны лежать 4 файла: .htkeyprivate (закрытый ключ), .htkeypublic(открытый ключ), DNS _resource_record.txt и PHPM ailer_code_plus_instructions.txt Копируем.htkeyprivate в веб сервер в папку keyprivate.

Открываем файл PHPMailer_code_plus_instructions.txt Далее заходим в панель администрирования, в раздел “Настройки” в кладке “Параметры рассылки” в поля "Настройки DKIM подписи" заполняем значения, которые прописаны в PHPMailer_code_plus_instructions.txt В поле “Подписанный домен” прописываем значение из $mail->DKIM_domain, в поле “Селектор” из $mail->DKIM_selector, в поле “ Ключевое слово ” из $mail->DKIM_passphrase, а в поле “Подписанная личность” адрес электронной почты, который указан у Вас настройках в "E-mail" Ставим галочку “Добавить подпись DKIM в заголовок письма” и кликаем “применить”.

Это ещё не все. Для того, чтобы можно было подтвердить валидность сервера отправителя по его записи DNS , необходимо добавить DKIM в txt-запись в конфигурации DNS . Для этого Вам нужно зайти в панель управления доменом (чтобы сделать это, Вы должны обладать правами администратора этого домена). Значение этой записи берем из файла DNS _resource_record.txt.

P.S. Дополнительную информацию о скрипте читайте в readme исходника.

PHP 5.4 и выше;
- База данных MySQL 5.0 и выше;
- Mail();
- Iconv;
- MB String;
- Zip;
- cURL

Возможности

PHP Newsletter имеет все необходимое для создания, рассылки и отслеживать E-mail рассылок. Это полнофункциональное программное обеспечение, который было разработано для email-маркетологов, включает в себя следующие полезные функции:

Удобный WYSIWYG редактор

Встроенный WYSIWYG редактор позволяет создавать и редактировать шаблоны писем. Вы можете форматировать текст, загружать и вставлять изображения, добавлять ссылки и многое другое.

Вы можете формировать списки рассылок, которые далее будут автоматически рассылаться в заданном по рядке по-расписанию. Всё, что вам нужно, это настроить крон и создавать список рассылки.

PHP Newsletter позволяет вам создавать формы для подписки и отписки на рассылку. Форму вы можете добавить на свой сайт, для этого разместите html код формы у себя на сайте.

Вы можете создавая привлекательные HTML письма или обычные текстовые сообщения электронной почты с помощью встроенного редактора шаблона писем.

Поддержка большинства известных кодировок

PHP Newsletter поддерживает свыше 35 различных национальных кодировок.

Добавление и отправление вложения

Скрипт включает в себя полную поддержку для загрузки и отправка вложений наряду с вашей рассылкой.

Для исключения попадания ваших писем в спам, рекомендуется в почтовых рассылках добавлять заголовки Precedence (bulk, junk или list) и list-unsubscribe.

Добавление DKIM подписи в заголовок письма

Для повышения качества классификации и идентификации легитимной электронной почты, средства PHP Newsletter позволяет добавлять DKIM-подпись (технология удостоверения подлинности отправителя письма при помощи добавления цифровой подписи, связанной с именем домена) в заголовки отправляемых писем.

Персонализация писем

Персонализация писем - это один из самых эффективных способов произвести хорошее первое впечатление на получателя рассылки, потому что по статистике персонализированные письма чаще открываются и прочитываются. Добавить в шаблон письма тег %NAME% и оно автоматически будет заменяться на имя подписчика.

Управление списком подписчиков

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

Импорт/экспорт адресов электронной почты

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

По каждой рассылке введется подробная статистика по количеству отправленных и неотправленных писем. Также вы можете получить информацию, сколько пользователей открыло писем. Кроме этого, Вы можете экспортировать статистику в MS Excel файл.

Веб интерфейс с администратора

Для работы и управление рассылкой, Вам предоставляется удобная и достаточно простая в работе панель администратора, доступная через веб интерфейс. Большое количество настоек позволит вам быстро настроить работу систему по ваши требования.

Мастер установки

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

Нововведения версии 5.3.x

Рандомная замена кириллицы на латиницу (обход спам фильтра);
- исправлены ошибки.

Установка

  1. Распакуйте дистрибутив в любой каталог вашего веб-сайта, например, в "/phpnewsletter" Можно устанавливать в корень;
  2. Запустите мастер установки, для этого наберите в браузере: http://ваш_сайт/пака_с_скриптом/install/;
  3. После процедуры инсталляции удалите каталог "/phpnewsletter/install/".

Настройка

Добавить на web-страницу форму подписки на рассылку

    $url = "http://ваш_сайт/phpnewsletter/?t=subform" ;

    echo $out [ 1 ] ;

Для обычных статических веб страниц, вставте html код:

Имя
E-mail

Настройка рассылки через smtp сервер

Для того, чтобы отправлять рассылку через smtp сервер выполните следующие ниже действия. Зайдите в панель администратора, далее в раздел "Настройки" и в кладке "SMTP сервера укажите smtp сервер, логин, пароль и порт smtp сервера (по-умолчанию 25). Выберите "Способ отправки" - SMTP сервер.

Настройка отправки писем через Mail.ru

E-mail:
Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
smtp сервер: smtp.mail.ru (smtp.list.ru / smtp.bk.ru / smtp.inbox.ru)
Порт smtp сервера: 465
Метод аутентификации: LOGIN

Способ отправки: SMTP сервер

Настройка отправки писем через Gmail

E-mail: Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Логин почтового ящика / пароль: имя почтового ящика полностью (Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. ), Ваш пароль к почтовому ящику

Smtp сервер: smtp.gmail.com
Порт smtp сервера: 465
Подключаться через безопасное соединение (SSL): Да
Метод аутентификации: LOGIN
Способ отправки: SMTP сервер

Настройка отправки писем через почту Яндекс

E-mail: Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Логин почтового ящика / пароль: имя почтового ящика полностью (Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. ), Ваш пароль к почтовому ящику
smtp сервер: smtp.yandex.ru
Порт smtp сервера: 465
Подключаться через безопасное соединение (SSL): Да
Метод аутентификации: LOGIN
Способ отправки: SMTP сервер

Настройка отправки писем через почту rambler.ru

E-mail: Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Логин почтового ящика / пароль: имя почтового ящика полностью (Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. ), Ваш пароль к почтовому ящику
smtp сервер: smtp.rambler.ru
Порт smtp сервера: 465
Подключаться через безопасное соединение (SSL): Да
Метод аутентификации: LOGIN
Способ отправки: SMTP сервер

Настройка отправки писем через почту hotmail

E-mail: Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Логин почтового ящика / пароль: имя почтового ящика полностью (Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. ), Ваш пароль к почтовому ящику
smtp сервер: smtp.live.com
Порт smtp сервера: 465
Подключаться через безопасное соединение (SSL): Да
Метод аутентификации: LOGIN
Способ отправки: SMTP сервер

Настройка отправки писем через почту Yahoo

E-mail: Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Логин почтового ящика / пароль: имя почтового ящика полностью (Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. ), Ваш пароль к почтовому ящику
smtp сервер: smtp.mail.yahoo.com
Порт smtp сервера: 465
Подключаться через безопасное соединение (SSL): Да
Метод аутентификации: LOGIN
Способ отправки: SMTP сервер

Добавить DKIM подпись

Для начала, Вам нужно сгенерировать DKIM ключ. Воспользуйтесь для этого онлайн сервисом https://port25.com/dkim-wizard/
В поле "Domain name" указываем Ваш домен почты, а в поле "DomainKey Selector" любое значение. После того, как Вы заполнили все поля формы, кликаем на кнопку "Submit", после чего, должен появвиться в текстовом поле внизу сгенерированный публичный (PUBLIC KEY) и приватный (RSA PRIVATE KEY) ключи.
Далее открываем блокнот или любой другой текстовый редактор и создаём 2 файла с именами: .htkeypublic и.htkeyprivate Копируем содержимое секции "BEGIN PUBLIC KEY", ставляем в файл.htkeypublic. Открываем.htkeyprivate, вставляем содержимое секции "BEGIN RSA PRIVATE KEY" и сохраняем.
После этого копируем созданные файлы на веб сервер в папку keyprivate каталога программы. В завершении, осталось настроить DNS. Используя подсказки сервиса, необходимо внести TXT записи в DNS Вашего доменного имени в панели управления регистратора доменного имени.
Следует добавить TXT записи следующего формата: mail._domainkey.example-site.com и _domainkey.example.com. Вместо example.com пропишите свой домен почты. Обе записи будут иметь следующий вид:

Domainkey.example-site.com. TXT "t=s; o=~;"
mail._domainkey.example.com. TXT "k=rsa\;
p=MIGfMA0GCSqGSIb3DQE….." Здесь прописываем открытый ключ (public key) из секции BEGIN PUBLIC KEY.

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

Authentication-Results: mx.google.com; spf=pass (google.com: domain of Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. designates 123.123.123.123 as permitted sender) smtp.mail=Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. ; dkim=pass [email protected]

Настройка рассылки по рассписанию

Запуск php скрипта из cron:

В настройках крон, пропишите команду, например * * * * * /usr/local/bin/php /home/user/www/phpnewsletter/cron.php
В примере используется запуск ежеменутно php скрипта, где /usr/local/bin/php является путь к php интерпретатору. Данный параметр является обязательным. На вашем сервере он может быть отличаться от приведеного примера. Для того, что бы узнать путь, необходимо выполнить команды which php или узнать у вашего хостинг провайдера.
/home/user/www/phpnewsletter/cron.php путь до скрипта на вашем веб сервере.

Запуск php скрипта методом GET:

Запуск php скрипта методом GET из cron`a используют программу wget. Строка cron-файла пишется так: * * * * * /usr/local/bin/wget "http://домен/phpnewsletter/cron.php"
/usr/local/bin/wget - путь до программы wget
http://домен/phpnewsletter/cron.php - ссылка на сам скрипт.

Как купить?

Стоимость лицензии PHP Newletter 5 для одного сайта 500 руб. , для неограниченного количество сайтов 1500 руб . Для пользователей PHP Newletter 4 скидка 50% при покупке новой лицензии. Оплату можно произвести на следующие реквизиты:

WebMoney
U237811811298
R198597198920
Z917380288657

Яндекс деньги
41001635943434

PayPal
Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Payeer
P33851732

В примечаниях указать: PHP Newsletter - "Ваш почтовый адрес"

Если у Вас возникнут вопросы или есть предложения, пожалуйста, пишите мне на адрес: Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.

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

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

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

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

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

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

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

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

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

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

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

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

Давайте разберемся, что нам для этого потребуется. Для того чтоб посетители имели возможность подписаться на вашу рассылку необходима форма для ввода адреса электронной почты. После ввода адрес надо запомнить. Давайте адреса будем сохранять в файле 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 письмо за минуту. Так что господа спамеры, обломайтесь:)

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




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

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

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

Давайте разберемся, что нам для этого потребуется. Для того чтоб посетители имели возможность подписаться на вашу рассылку необходима форма для ввода адреса электронной почты. После ввода адрес надо запомнить. Давайте адреса будем сохранять в файле 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/ . Изменения и дополнения