PHP Скрипт отложенной рассылки писем.

Author Автор: Роман Чернышов    Опубликовано: 21 декабря 2012

Очень часто возникает потребность организовать на сайте массовую рассылку писем, например новости сайта для нескольких тысяч пользователей. Но в виду ограничений некоторых хостингов(часто шаред хостинг) на кол-во рассылаемых писем в час, в сутки, эта задача становится не такой уж и простой. Хостеры просто режут все письма превышающие этот лимит и не рассылают адресатам, оно и понятно, борьба со спамерами. Ведь небольшому сайтику незачем рассылать тысячи писем в час, а большой может вполне себе позволить выделенные сервер где нет этих ограничений.

Но, что делать если все-же вам нужно рассылать большое кол-во писем? Для этого есть простое решение, а именно PHP скрипт отложенной рассылки писем. Принцип его работы прост, все рассылаемые письма проходят через него и далее вместо того, чтобы отправится адресату складываются в базу данных. После чего этот скрипт вызывается автоматически через Cron, в заданный интервал времени и рассылает заданное количество писем из базы, за раз. Таким образом не превышая установленных лимитов хостера и добиваясь заданной цели.

Скрипт оформлен в виде класса. Для его работы требуются два дополнительных вспомогательных класса, которые идут с ним в архиве, это:
dbsql.class.php — класс работа с базой данных
mail.class.php — класс для отправки почты

Пример использования скрипта.

include('mail.class.php'); // подключаем класс для отправки почты
include('dbsql.class.php'); // подключаем класс работа с базой данных
 
include('mailStec.class.php'); // подключаем наш класс отложенной рассылки
 
// устанавливаем подключение с БД, указав параметры доступа к БД
$DB=new DB_Engine('mysql', 'dbHost', 'dbUser', 'dbPass', 'dbName');
 
// создаем объект для отправки почты
$m = new Mail();
 
$ms = new mailStec (); // инициализация отложенной рассылки
$ms->db = $DB; // передаем в отложенную рассылку указатель БД, чтобы скрипт отложенной рассылки мог работать с базой данных, используя методы класса mbsql.class.php
$ms->m = $m;  // передаем в отложенную рассылку, объект работы с почтой
 
// далее идет непосредственно сама передача письма в очередь на отправку
// ставим в очередь письмо $from - от кого(email), $email - email получетеля, $subject - тема письма, $body - текст письма, $priority - приоритет в очереди(от 1 до 10), чем меньше тем первее отправится.
$ms->SetStec($from, $email, $subject, $body, $priority);

Собственно команду $ms->SetStec($from, $email, $subject, $body, $priority); и нужно использовать в любом месте вашего скрипта для отправки письме, вернее для помещения письма в очередь.

Для автоматический рассылки писем, следует настроить крон на запуск скрипта, в котором будет содержаться следующий код

include('mail.class.php'); // подключаем класс для отправки почты
include('mbsql.class.php'); // подключаем класс работа с базой данных
 
include('mailStec.class.php'); // подключаем наш класс отложенной рассылки
 
// устанавливаем подключение с БД, указав параметры доступа к БД
$DB=new DB_Engine('mysql', 'dbHost', 'dbUser', 'dbPass', 'dbName');
 
// создаем объект для отправки почты
$m = new Mail();
 
$ms = new mailStec (); // инициализация отложенной рассылки
$ms->db = $DB; // передаем в отложенную рассылку указатель БД, чтобы скрипт отложенной рассылки мог работать с базой данных, используя методы класса mbsql.class.php
$ms->m = $m;  // передаем в отложенную рассылку, объект работы с почтой
 
// Отправить из очереди 50 писем, если не указать кол-во будет отправлено по умолчанию 100 писем из очереди
$ms->SendStec(50);

Для работы скрипта создайте таблицу в базе данных mySQL

CREATE TABLE `stecmail` (
  `id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `from` varchar(100) COLLATE 'utf8_general_ci' NOT NULL,
  `email` varchar(100) COLLATE 'utf8_general_ci' NOT NULL,
  `subject` varchar(255) COLLATE 'utf8_general_ci' NOT NULL,
  `body` text COLLATE 'utf8_general_ci' NOT NULL,
  `priority` int NOT NULL,
  `status` int NOT NULL
) COMMENT='';

Скачать исходники скрипта

Надеюсь данное решение пригодится вам. Решение достаточно универсально и автономно, можно подключить к любой CMS, любому сайту на любом хостинге. Обширные возможности класса работы с почтой, также позволят гибко настроить работу рассылки, например использовать сторонний SMTP сервер.

Оставить комментарий

Автор блога
Роман Чернышов
Веб-разработчик,
Full Stack
Senior, Architect
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Моя книга
Книга. Веб-разработчик. Легкий вход в профессию
Печатная книга
Веб-разработчик.
Легкий вход в профессию
Оформить предзаказ
Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка