
Sendex
Email-рассылки в MODX — подписчики, очередь писем и форма подписки на сайте


Публичного REST API у Sendex нет. Работа идёт через xPDO-модели и классы sx* из контекста MODX (сниппет, плагин, cron).
Cron и connector подключают bootstrap автоматически. В своём коде:
$corePath = $modx->getOption('sendex_core_path', null, MODX_CORE_PATH . 'components/sendex/');
require_once $corePath . 'bootstrap.php';
sendexBootstrap($modx);/** @var sxNewsletter $newsletter */
$newsletter = $modx->getObject('sxNewsletter', 1);
if (!$newsletter) {
return;
}| Метод | Описание |
|---|---|
subscribe($userId, $email, $source) | Подписка; $source: snippet, ajax, confirm, mgr, guest |
unSubscribe($code, $source) | Отписка по sxSubscriber.code |
confirmEmail($hash) | Подтверждение guest после перехода по ссылке |
isSubscribed($userId, $email) | ID подписчика или 0 |
addQueues() | Сформировать очередь для всех подписчиков рассылки |
sendToSubscribers($options) | addQueues() + flush() одним вызовом |
$newsletter = $modx->getObject('sxNewsletter', 1);
$result = $newsletter->subscribe($modx->user->id, '', 'mgr');
// true | false | string (сообщение об ошибке / отмена Before-события)$newsletter = $modx->getObject('sxNewsletter', 1);
$result = $newsletter->sendToSubscribers([
'stopOnError' => true,
]);
// ['success' => bool, 'message' => string, 'queued' => int, 'sent' => int, ...]Низкоуровневая отправка очереди (cron использует тот же класс):
require_once MODX_CORE_PATH . 'components/sendex/model/sendex/sxqueuesender.class.php';
$stats = sxQueueSender::flush($modx, [
'limit' => (int) $modx->getOption('sendex_queue_limit', null, 100),
'logErrors' => true,
'criteria' => ['newsletter_id' => 1], // опционально
]);
// ['sent' => int, 'skipped' => int, 'failed' => int, 'firstError' => string|null]Одна строка:
$queue = $modx->getObject('sxQueue', 42);
$result = sxQueueSender::sendOne($queue);
// true | false (skip) | string (ошибка mail)$queue->send() у sxQueue — используйте sxQueueSender::sendOne()Sendex на сайтеЛюбой вызов subscribe, unSubscribe, addQueues, flush проходит через события sxOn*. Подробнее: События.