Обучаю битриксу программистов, интеграторов. Подробнee ⇒

Агент, который еще раз запускает неудачные почтовые события



Сервер с сайтом в одной стране, почтовик в другой, из-за этого около 2% писем иногда не отправлялись (сайт не мог в редких случаях с почтовиком связаться). В таблице b_event события были со статусом F.

Задача:
Пометить те события, по которым не отправлены письма, как новые, чтобы попытаться их еще раз отправить.
Функция где-нить в init.php  и агент запускаем раз в 5 минут
function UpdateEventsWithStatusF(){    
    global $DB;

    $strSql = "SELECT ID FROM b_event WHERE  SUCCESS_EXEC='F' and DATE_INSERT>'".date("Y-m-d H:i:s", time() - (60*60*27))."'"; //sql запрос    
    $res = $DB->Query($strSql); //выполняет запрос SELECT,INSERT,DELETE,UPDATE

    $DB->StartTransaction();
    $arFields = [
        "SUCCESS_EXEC"=>"'N'",
        "DATE_EXEC" => "''"
    ];
    while ($row = $res->Fetch()){        
        $DB->Update("b_event", $arFields, "WHERE ID='".$row["ID"]."'",$err_mess.__LINE__);
    }
    if (strlen($strError)<=0){
        $DB->Commit(); //сохранить последние изменения в базе и закрыть транзакцию
    }
    else{
        $DB->Rollback(); //откатить изменения  и закрыть транзакцию
    }
    return "UpdateEventsWithStatusF();";
}
Если блог был полезным, можете угостить меня "чашечкой кофе" :)

Сбер по номеру телефона +7 (953) 585-13-09 Вероника.
Спасибо!