Бесплатно
Загрузите дополнение из админки вашего сайта.
Как загрузить?
Как загрузить?
Внимание, этот компонент несовместим с MODX 3.
Компонент хранит три сущности в отдельных таблицах:
В админке можно пройти весь цикл вручную: создать рассылку, добавить подписчиков, сгенерировать очередь и отправить письма. Часть шагов автоматизируется через сниппет, cron и события плагина.
Создаём рассылку:

Укажите шаблон письма (один идёт в комплекте). В шаблоне можно вызывать сниппеты.
Подписываем пользователя:

Вручную из менеджера можно подписать только пользователя сайта. Гости подписываются через сниппет на фронте. Можно добавить всю группу пользователей MODX (только активные и не заблокированные). Гостевые записи с тем же email сливаются с аккаунтом при активации или сохранении пользователя.
Генерируем письма:

Рассылка обходит подписчиков и кладёт письма в очередь. Новые строки хранят пустое тело: HTML собирается из шаблона рассылки в момент отправки. Старые строки с сохранённым HTML отправляются как есть.
Отправляем:

В сетке рассылок есть действие «Отправить подписчикам»: одним кликом вызываются addQueues и отправка очереди. Отправку можно запускать по одному письму, пакетом из админки или по cron.
Сниппет Sendex
Вызов на странице:
Сниппет показывает форму подписки и отписки. Авторизованный пользователь нажимает кнопку. Гость подтверждает email по ссылке из письма, если включено подтверждение (&confirmEmail=1 или системная настройка sendex_confirm_email). С &confirmEmail=0 гость подписывается сразу.
По умолчанию формы работают через AJAX: assets/components/sendex/js/web/sendex.js отдаёт JSON {success, message, html} и обновляет виджет без перезагрузки страницы. Несколько виджетов на одной странице разводите через &widgetKey=.
Уже подписанному пользователю показывается кнопка отписки. Гость отписывается по ссылке из письма (code + newsletter_id в URL).
Сниппет — готовый пример. Логику подписки можно перенести в свой код через методы sxNewsletter.
Основные методы
Объект sxNewsletter
Генерация очереди через API:
Метод вернёт true или текст ошибки (в том числе если ни одной строки очереди не создано).
Объект sxSubscriber
Запись в таблице и есть подписка. При отписке строка удаляется. Поле code — уникальный код для ссылки отписки. Уникальность в рамках рассылки: пара (newsletter_id, email).
Объект sxQueue
Перед отправкой строка «захватывается» (claim): параллельные cron-воркеры не отправят одно письмо дважды. При ошибке почты строка возвращается в очередь для повторной попытки. После успешной отправки строка удаляется.
Пакетная отправка (так работает cron):
Cron-скрипт: /core/components/sendex/cron/send.php. Запуск из корня сайта:
События плагина
Подписка и отписка: sxOnBeforeSubscribe, sxOnSubscribe, sxOnBeforeUnsubscribe, sxOnUnsubscribe.
Очередь: sxOnBeforeAddQueues, sxOnAddQueues, sxOnBeforeQueueSend, sxOnQueueSend, sxOnQueueSendFailed, sxOnQueueFlushComplete.
События «Before» можно отменить через $modx->event->output('сообщение').
Обновление с 1.x
Установка и апгрейд прогоняют Phinx-миграции (core/components/sendex/migrations/). Таблицы переводятся на InnoDB и utf8mb4. В очереди поле subscriber_id ссылается на sxSubscriber.id, а не на modUser.id. После апгрейда существующие строки пересчитываются миграцией.
Что сделать на сайте
- sxNewsletter — рассылка: тема, отправитель, шаблон письма и остальные параметры.
- sxSubscriber — подписчик: email и id рассылки обязательны; id пользователя MODX сохраняется, если он был авторизован при подписке.
- sxQueue — письмо в очереди на отправку.
В админке можно пройти весь цикл вручную: создать рассылку, добавить подписчиков, сгенерировать очередь и отправить письма. Часть шагов автоматизируется через сниппет, cron и события плагина.
Создаём рассылку:

Укажите шаблон письма (один идёт в комплекте). В шаблоне можно вызывать сниппеты.
Подписываем пользователя:

Вручную из менеджера можно подписать только пользователя сайта. Гости подписываются через сниппет на фронте. Можно добавить всю группу пользователей MODX (только активные и не заблокированные). Гостевые записи с тем же email сливаются с аккаунтом при активации или сохранении пользователя.
Генерируем письма:

Рассылка обходит подписчиков и кладёт письма в очередь. Новые строки хранят пустое тело: HTML собирается из шаблона рассылки в момент отправки. Старые строки с сохранённым HTML отправляются как есть.
Отправляем:

В сетке рассылок есть действие «Отправить подписчикам»: одним кликом вызываются addQueues и отправка очереди. Отправку можно запускать по одному письму, пакетом из админки или по cron.
Сниппет Sendex
Вызов на странице:
[[!Sendex? &id=`1`]]Сниппет показывает форму подписки и отписки. Авторизованный пользователь нажимает кнопку. Гость подтверждает email по ссылке из письма, если включено подтверждение (&confirmEmail=1 или системная настройка sendex_confirm_email). С &confirmEmail=0 гость подписывается сразу.
По умолчанию формы работают через AJAX: assets/components/sendex/js/web/sendex.js отдаёт JSON {success, message, html} и обновляет виджет без перезагрузки страницы. Несколько виджетов на одной странице разводите через &widgetKey=.
Уже подписанному пользователю показывается кнопка отписки. Гость отписывается по ссылке из письма (code + newsletter_id в URL).
Сниппет — готовый пример. Логику подписки можно перенести в свой код через методы sxNewsletter.
Основные методы
Объект sxNewsletter
- addQueues — добавляет письма в очередь для всех подписчиков рассылки
- sendToSubscribers — addQueues + отправка очереди этой рассылки (то же, что кнопка в админке)
- subscribe — подписка по id пользователя или email
- subscribeGuest — гостевая подписка с подтверждением или без
- subscribeGroup — массовая подписка группы пользователей
- checkEmail — отправка проверочной ссылки гостю
- confirmEmail — подтверждение email по hash из ссылки
- unSubscribe — отписка по полю code из sxSubscriber
- isSubscribed — проверка по user_id или email; возвращает id sxSubscriber или 0
Генерация очереди через API:
$modx->addPackage('sendex', MODX_CORE_PATH . 'components/sendex/model/');
require_once MODX_CORE_PATH . 'components/sendex/bootstrap.php';
sendexBootstrap($modx);
/** @var sxNewsletter $newsletter */
if ($newsletter = $modx->getObject('sxNewsletter', 1)) {
$response = $newsletter->addQueues();
if ($response !== true) {
echo $response; die;
}
}Метод вернёт true или текст ошибки (в том числе если ни одной строки очереди не создано).
Объект sxSubscriber
Запись в таблице и есть подписка. При отписке строка удаляется. Поле code — уникальный код для ссылки отписки. Уникальность в рамках рассылки: пара (newsletter_id, email).
Объект sxQueue
- send — отправка одного письма через sxQueueSender::sendOne
Перед отправкой строка «захватывается» (claim): параллельные cron-воркеры не отправят одно письмо дважды. При ошибке почты строка возвращается в очередь для повторной попытки. После успешной отправки строка удаляется.
Пакетная отправка (так работает cron):
$modx->addPackage('sendex', MODX_CORE_PATH . 'components/sendex/model/');
require_once MODX_CORE_PATH . 'components/sendex/bootstrap.php';
sendexBootstrap($modx);
sxQueueSender::flush($modx, array(
'limit' => $modx->getOption('sendex_queue_limit', null, 100, true),
'logErrors' => true,
));Cron-скрипт: /core/components/sendex/cron/send.php. Запуск из корня сайта:
php core/components/sendex/cron/send.phpСобытия плагина
Подписка и отписка: sxOnBeforeSubscribe, sxOnSubscribe, sxOnBeforeUnsubscribe, sxOnUnsubscribe.
Очередь: sxOnBeforeAddQueues, sxOnAddQueues, sxOnBeforeQueueSend, sxOnQueueSend, sxOnQueueSendFailed, sxOnQueueFlushComplete.
События «Before» можно отменить через $modx->event->output('сообщение').
Обновление с 1.x
Установка и апгрейд прогоняют Phinx-миграции (core/components/sendex/migrations/). Таблицы переводятся на InnoDB и utf8mb4. В очереди поле subscriber_id ссылается на sxSubscriber.id, а не на modUser.id. После апгрейда существующие строки пересчитываются миграцией.
Что сделать на сайте
- Оформить шаблон письма, создать рассылку и указать шаблон в настройках.
- Подписать пользователей вручную, группой, через сниппет или API.
- По событию или по расписанию вызвать addQueues или sendToSubscribers.
- Отправить очередь из админки или через cron.
Документация: docs.modx.pro/komponentyi/sendex. Исходники и issue tracker: GitHub.
1.1.4-pl
- [#37] Added functionality to export email addresses
- Fix css bug for user group combo
1.1.3-pl
- [#32, #33] Added parameter &msgClass for placeholder [[+class]]
- [#31] Added messages for frontend
- [#30] Change phptype text to string
1.1.2-pl
- [#23] Added button for removing all letters from queue
1.1.1-pl
- Fixed modUserProfile getting on creating subscriber
1.1.0-pl
- Improved installation script for MODX 2.4.
1.1.0-rc
- UI improvements.
- Ability to add all users of the group to the newsletter.
- Added multiselect in all grids.
- Added subscribers count in newsletters grid.
- Added buttons to grids for touch devices.
- Added Font Awesome icons for MODX < 2.3.
- [#21] Compatibility with MODX 2.3.
- [#20] Added "send all" button to queues grid.
1.0.0-pl
- Added multiremoving and multisending
- [#11]Added $_GET's subscribed, unsubscribed, confirmed
- [#1] Fixed urls of images
1.0.0-rc2
- Various small fixes.
==============
- Fixed caching of template.
1.0.0-beta
- Initial release.




Последние обсуждения в сообществе MODX.pro