Всего существует несколько статусов в таблице b_event
F — письмо по всем почтовым шаблонам не смогли быть отправлены
P — часть писем отправлена успешно, часть писем — безуспешно
0 — почтовые шаблоны не были найдены
N — почтовое событие ещё не обрабатывалось функцией CEvent::CheckEvents\
если письмо не ушло и находится в F, то оно ставится в N, сбрасывается кеш и снова пытается отправиться.
код без событий. только класс и функция и вешаем на агент.
функционал работает у меня на 43-ёх сайтах. идеально.
Настройки агента:
Активен: Y
Модуль: main
Функция агента: restartEventEmail::restartProcess();
ID пользователя: пусто
Сортировка: 1 (единичка)
Периодичность выполнения: через заданный интервал
Интервал (сек.): 1800
F — письмо по всем почтовым шаблонам не смогли быть отправлены
P — часть писем отправлена успешно, часть писем — безуспешно
0 — почтовые шаблоны не были найдены
N — почтовое событие ещё не обрабатывалось функцией CEvent::CheckEvents\
если письмо не ушло и находится в F, то оно ставится в N, сбрасывается кеш и снова пытается отправиться.
код без событий. только класс и функция и вешаем на агент.
функционал работает у меня на 43-ёх сайтах. идеально.
Код |
---|
class restartEventEmail { public function restartProcess() { $connection = \Bitrix\Main\Application::getConnection(); $cache = \Bitrix\Main\Application::getInstance()->getManagedCache(); $recordN = $connection->query("sel ect count(*) as count fr om b_event where success_exec = 'N'")->fetch(); $recordF = $connection->query("select count(*) as count fr om b_event where success_exec = 'F'")->fetch(); $arRecord = ['N' => $recordN['count'], 'F' => $recordF['count']]; //print_r($arRecord); if ($arRecord['F'] > 0) { $connection->query("UPD ATE b_event se t SUCCESS_EXEC='N' wh ere SUCCESS_EXEC='F'"); //'cleanDir -> orm_b_event'; //$cacheTtl = '3600'; //$tableId = "agents"; //$tableId_N = "orm_b_event"; //$cacheId = "agents AND IS_PERIOD='Y' "; //$cacheId_N = "agents AND IS_PERIOD='N' "; /* if ($cache->read($cacheTtl, $cacheId)) { $vars = $cache->get($cacheId); // достаем переменные из кеша } if ($cache->read($cacheTtl, $cacheId_N)) { $vars = $cache->get($cacheId_N); // достаем переменные из кеша }*/ /* if ($cache->read($cacheTtl, $cacheId)) { $vars = $cache->get($cacheId); // достаем переменные из кеша } */ //$cache->cleanAll(); //$cache->clean($cacheId, $tableId); //$cache->clean($cacheId_N, $tableId); //$cache->cleanDir($tableId); //$cache->cleanDir($tableId_N); //$cache->cleanDir('user_option'); //$cache->cleanDir('b_task'); //$cache->cleanDir('b_task_operation'); $cache->cleanDir('access_check'); //print_r($vars); } return 'restartEventEmail::restartProcess();'; } } |
Настройки агента:
Активен: Y
Модуль: main
Функция агента: restartEventEmail::restartProcess();
ID пользователя: пусто
Сортировка: 1 (единичка)
Периодичность выполнения: через заданный интервал
Интервал (сек.): 1800