1. Создаём в корневой папке сайта папку с названием «dev» и помещаем туда файл reposting.php. Ниже код файла, также можно скачать файл в конце статьи.
<?php
$_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__FILE__)."/..");
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS",true);
define('BX_NO_ACCELERATOR_RESET', true);
define('CHK_EVENT', true);
define('BX_WITH_ON_AFTER_EPILOG', true);
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
// записывает все что передадут в /_log_array.log
if(!function_exists('log_error')) {
function log_error() {
$arArgs = func_get_args();
$sResult = '';
$sResult = date(DATE_RFC822) . "\n";
foreach($arArgs as $arArg) {
$sResult .= print_r($arArg, true) . "\n\n";
}
file_put_contents(__DIR__ . '/../dev/_errors.log', $sResult . PHP_EOL, FILE_APPEND);
}
}
if(CModule::IncludeModule('subscribe'))
{
$cPosting = new CPosting;
// 86400 - один день (кол-во секунд)
// Получаем дату минус день
$fromDate = date('d.m.Y', time() - 86400);
// Поиск по рассылкам со статусом "Е" - Отправлено с ошибками
$arFilter = Array(
"STATUS" => "E",
"DATE_SENT_1" => $fromDate
);
$arSort = Array(
"STATUS"=>"ASC",
"DATE_SENT"=>"DESC"
);
$rsPosting = $cPosting->GetList($arSort, $arFilter, Array());
$strError .= $cPosting->LAST_ERROR;
if($post = $rsPosting->Fetch())
{
if($post['ID']) {
// Переводим рассылку в статус "P" (Частично отправлена)
if($cPosting->ChangeStatus($post['ID'], "P")) {
// Отправка максимум 1000 писем
$res = $cPosting->SendMessage($post['ID'], COption::GetOptionString("subscribe", "posting_interval"), 1000);
$strError .= $cPosting->LAST_ERROR;
}
}
}
// Если есть ошибки - выводим в лог
if($strError) {
log_error($strError);
}
}
2. Проверяем права на доступ к папке и файлу
3. Запускаем файл вручную (в адресной строке набираем ваш_сайт/dev/reposting.php) и проверяем папку «dev» — если в папке будет файл _errors.log, то в нём можно прочитать про ошибки.
3. В кроне создаём задачу на ежедневный запуск файла
Скачать: