Description
По умолчанию, все письма в статусе Ready автоматически направляются в очередь для обработки. Из-за инфраструктурного сбоя возможна потеря части заданий на обработку писем в очереди. Для повторной отправки писем на обработку используйте одно из обходных решений, описанных ниже.
Workaround
Необходимая роль: admin
Если писем не более 1000 - используйте серверный скрипт, запущенный вручную через форму Server Script:
- Перейдите по ссылке /record/sys_script
- Заполните поле скрипт значением:
let startDatetime = new SimpleDateTime();
startDatetime.addSeconds(-120); // перезапустить письма зависшие более чем на 2 минуты
const readyEmail = new SimpleRecord('sys_email');
readyEmail.addQuery('status', 'ready');
readyEmail.addQuery('sys_created_at', '>', startDatetime.getValue());
readyEmail.query();
ss.info(readyEmail.getRowCount());
readyEmail.setMultipleValue('status', 'not_ready');
// readyEmail.updateMultiple();
const notReadyEmail = new SimpleRecord('sys_email');
notReadyEmail.addQuery('status', 'not_ready');
notReadyEmail.query();
notReadyEmail.setMultipleValue('status', 'ready');
// notReadyEmail.updateMultiple();
- Запустите скрипт по кнопке Run.
- Раскомментируйте обе строки с вызовом метода updateMultiple().
- Сохраните форму.
- Запустите скрипт по кнопке Run.
Если писем более 1000 - используйте скрипт по расписанию скрипт Scheduled Script.
- Создайте запись Scheduled Script со значениями:
2.Name*: Reprocess ready emails
3.Run as*: Admin User
4.Active*: No
5.Run frequency*: Periodically
6.Run period*: 2 минуты
7.Run date and time*: 2021-12-31 00:00:00 - Заполните поле скрипт значением:
let startDatetime = new SimpleDateTime();
startDatetime.addSeconds(-120); // перезапустить письма зависшие более чем на 2 минуты
const readyEmail = new SimpleRecord('sys_email');
readyEmail.addQuery('status', 'ready');
readyEmail.addQuery('sys_created_at', '>', startDatetime.getValue());
readyEmail.setLimit(500);
readyEmail.query();
ss.info(readyEmail.getRowCount());
readyEmail.setMultipleValue('status', 'not_ready');
readyEmail.updateMultiple();
const notReadyEmail = new SimpleRecord('sys_email');
notReadyEmail.addQuery('status', 'not_ready');
notReadyEmail.query();
notReadyEmail.setMultipleValue('status', 'ready');
notReadyEmail.updateMultiple();
- Сохраните форму.
- Измените значение в поле Active на Yes и сохраните форму.
- Деактивируйте скрипт Scheduled Script, когда в списке по ссылке будет 0 записей:
/list/sys_email?condition=(sys_created_at<javascript%3A%20%7B%20let%20last2mins%20%3D%20new%20SimpleDateTime()%3B%20last2mins.addSeconds(-120)%3B%20return%20last2mins.getValue()%7D%5Estatus%3Dready)%5EORDERBYDESCsys_created_at