Большое спасибо... это почти идеально подходит для цели! Думаю, будет отлично работать в большинстве обычных случаев. Но, на мой взгляд, в некоторых особых ситуациях этот подход подведёт. Я сделал такой скрипт:
:local attempts 0;
do {
:set attempts ($attempts+1);
:if ($attempts > 1) do {:log info ("ERROR - статус последнего письма: ".[/tool e-mail get last-status]

; :delay 2s;}
/tool e-mail send ... ;
do {:delay 200ms;} while ([/tool e-mail get last-status] = "in-progress")
} while ($attempts < 5 and [/tool e-mail get last-status] != "succeeded")
То есть скрипт пытается отправлять письмо заново каждые 2 секунды, если последний статус не “succeeded”. Но представим, что одна отправка письма с большим вложением ещё в процессе и занимает много времени (last-status = ‘in-progress’). Теперь представим, что в этот момент отправляется другое, короткое письмо. Если второе письмо ушло успешно, last-status обновится на ‘succeeded’, и первый скрипт прекратит работу — он уже не проверит, удалось ли отправить первое письмо или нет. А если первое письмо упадёт с ошибкой, оно не будет отправлено заново. Это так?