Delivery: подписчики и рассылки

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

Документация

Читать

Компонент Delivery: подписчики и рассылки пришел на смену компоненту Subscribers. Новый компонент также предоставляет механизмы для формирования базы подписчиков, текстов рассылок, а также создания и отправки почтовых рассылок этим подписчикам.

Не требуется дополнительной установки других компонентов.

Подписка на рассылку

Для вывода формы подписки в любом месте сайта можно воспользоваться вставкой - %subscribe_form{}.

	//где-то на странице ...
	...
	<div>%subscribe_form{}</div>
	...

Или вызвать метод:

	//где-то на странице ...
	...
	<div><?= $this->delivery->subscribe_form() ?></div>
	...

Также форму подписки можно вывести на отдельной странице, которая доступна по адресу /subscribers/subscribe/.

Подписчики

В компоненте предусмотрен механизм формирования базы подписчиков. Пользователи, которые подписались на рассылку, получают письма с подтверждением подписки. Адреса подписавшихся собираются в базе и выводятся в таблице в администраторе (/admin/subscribers/).

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

Есть возможность объединять подписчиков в определенные группы. Для этого нужно создать группу с соответствующим названием (/admin/subscribers/groups/). А при редактировании записи с информацией по подписчику появится дополнительная вкладка со списком групп, где можно будет привязать подписчика к определенной группе.

При формировании рассылки на этапе выбора подписчиков есть возможность производить выбор по определенным группам:

  • всем подписчикам;
  • выбор из групп;
  • загрузка из .csv файла;
  • формирование списка вручную;
  • выбор всех зарегистрированных пользователей.

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

Отписка от рассылки

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

Установка настроек конфигурирования

Основные настройки для компонента содержатся в файле main.php.

// app/components/Delivery/app/config/main.php
return array(
	'site_name' => 'Example.ru',
	'from' => "robot@example.ru",
	'utm_parms' => 'utm_source=site_mail&utm_medium=email_letter&utm_campaign=site_delivery_{:DATE}',
	'layout' => 'mail',
	'delivery_tpl' => CMS::component_dir('Delivery', 'views/') . 'delivery',
	'limit' => 500,

где

  • site_name - название сайта, которое будет фигурировать в заголовке письма.
  • site_host - хост сайта.
  • from - электронный адрес, с которого будет производиться рассылка.
  • utm_parms - utm-метка. Будет подставляться во все ссылки в письме.
  • layout - шаблон обрамления. По умолчанию берется из app/views/layouts/mail.phtml.
  • delivery_tpl - шаблон самого письма.
  • limit - максимальное количество писем, отправляемых в одной партии за определенный промежуток времени.

Настройка заданий на рассылку

1. Новую рассылку можно создать в админе (/admin/delivery/). В нее можно прикрепить картинки и прописать их в теле рассылки, либо просто прикрепить какие-нибудь файлы, например, прайс-листы).

2. Когда тело рассылки сформировано, нажимаем кнопку «Разослать» и переходим на форму для выбора списка подписчиков. По умолчанию предлагается производить рассылку всем подписчикам из таблицы (/admin/subscribers/), у которых нет отписок и подписка подтверждена.

К подписанным адресам можно добавлять произвольные адреса или загружать списки адресов. Или вообще вносить только неподписанные адреса.

3. После подтверждения запуска рассылка попадает в список заданий на рассылку (/admin/delivery/tasks/).

В таблице отображается индикация статуса процесса подготовки рассылок.

Настройка крона для отправки рассылок

После того как рассылка сформирована, необходимо настроить ее реальную рассылку в кроне. Для этого необходимо в крон добавить следующие скрипты: delivery_send, delivery_make_task. Например:

*/1 * * * * cd /путь/www/; /usr/local/bin/php index.php delivery_make_task
*/5 * * * * cd /путь/www/; /usr/local/bin/php index.php delivery_send

Где:

  • delivery_make_task - скрипт формирует список подписчиков.
  • delivery_send - формирование рассылки.

Скрипт позволяет производить рассылку отдельными партиями с определенной частотой. Количество писем в одной партии задается через файл настроек конфигурации в параметре limit. Частота настраивается в кроне в виде временного промежутка. В примере выше, крон будет проверять каждые 5 минут наличие писем, которые еще не были отосланы, и отсылать новую партию.

Использование переменных в тексте письма

Иногда возникает необходимость вставлять в письма для рассылки какие-либо персонифицированные данные. Для этого можно использовать специальным образом именованные переменные, имеющие синтаксис:

	{:переменная}

Для этого в компоненте был реализован класс загрузчика (app/components/Delivery/lib/Recipients/Loader.php), который обрабатывает такие переменные и подставляет нужные данные в них. Для нужд компонента были описаны две переменных:

  • {:UNSUBSCRIBE_TEXT} - подключает шаблон, который выводит текст и ссылку для отписки. Используется в шаблоне письма с рассылкой для подписанных посетителей.
  • {:DATE} - подставляет текущую дату. Используется в utm-метке, подставляя текущую дату.

Если необходимо описать пользовательскую переменную, то для этого переопределен класс загрузчика (app/component/Delivery/app/Recipients/Loader.php). В нем можно описать все необходимые свойства и методы.

Использование нестандартных шаблонов

Часто для рассылки требуется пользовательский шаблон обрамления вместо стандартного предустановленного шаблона mail или шаблон самого письма. Для этого необходимо создать свой шаблон, например, в папке app/component/Delivery/app/layouts/news-mail.phtml.

И в конфигурационном файле прописать путь до этого шаблона. Например:

// app/components/Delivery/app/config/main.php
return array(
	...
	// поменяли шаблон обрамления на пользовательский
	'layout' => CMS::component_dir('Delivery', 'app/layouts/news-mail'),
	'delivery_tpl' => CMS::component_dir('Delivery', 'views/') . 'delivery',
	...

Все версии

Обращаем ваше внимание, что установка и обновление компонентов штатным способом осуществляется из системы управления вашим сайтом ("Библиотека компонентов"). Данный раздел несет прежде всего информационную функцию. Однако, вы можете скачивать инсталляционные пакеты компонентов в целях ознакомления или в случае если функционирование библиотеки компонентов по какой-то причине затруднено.


Версия Дата
0.1.21
Изменения
Fix исправлена ошибка с подстановкой переменных в шаблоны писем. Описание проблемы: Когда в шаблоне используется подстановка типа `{:NAME}`, которая должна быть индивидуальной для каждого получателя, то подстановка значения осуществляется только для первого получателя, всем остальным отправляется это же значение. Например, отправили вы письмо, начинающееся с "Приветствуем, {:NAME}" и отослали Ивану Борисовичу и Ольге Петровне. И все, в том числе Ольга Петровна, получают письмо с приветствием "Приветствуем, Иван Борисович". Или более частый пример - всем подписчикам рассылается письмо с ссылкой на отписку для первого получателя. Проблема старая, связана с клонированием объектов. Она была пофикшена не в компоненте, а в библиотеке в версии `2.1.133`. Но, как оказалось, существуют проекты, где по каким-то причинам обновить библиотеку страшно или невозможно. Теперь компонент определяет пофикшена ли проблема в бибилиотеке и если нет, то фиксит сам. Итого - если у вас компонент Delivery и tao2 версии меньше `2.1.133`, то вам стоит беспокоится. Нужно либо обновить тао, либо компонент, либо самостоятельно внедрить данные изменения http://gitlab.techart.ru/components/delivery/commit/d881411c623d03cfa54f32b140b6de226048cfd9
04.10.2018
0.1.20
Изменения
Логирование ошибок Изменена проверка на валидность (не проходят строки с двумя и более адресами) Поддержка php5.3
10.04.2018
0.1.19 14.03.2018
0.1.18 25.01.2017
0.1.17 09.11.2016
0.1.16 28.10.2016
0.1.15 25.02.2016
0.1.14 07.12.2015
0.1.13 03.12.2015
0.1.12 10.11.2015
0.1.11 30.10.2015
0.1.10 28.10.2015
0.1.9 28.10.2015
0.1.8 11.09.2015
0.1.7 02.06.2015
0.1.6 02.06.2015
0.1.5 03.02.2015
0.1.4 24.12.2014
0.1.3 23.12.2014
0.0.21 02.12.2014
0.0.20 02.12.2014