День добрый.
Возникла необходимость рассылки писем по почтовым шаблонам с логированием отправки. Решил организовать это, пуская письма через модуль рассылки, расширив класс CEvent:[CODE]namespace CSN;
class CEvent extends \CEvent
{
<...>
function SendIssue($event, $lid, $arFields, $message_id = "") {
$ID = "";
$arFields = array_merge($arFields, $this->GetSiteFieldsArray($lid)); // Adding stndard fields for replacement
// Declare filter for posting templates
$arFilter = array("TYPE_ID" => $event);
if ($message_id) $arFilter["ID"] = $message_id;
// Process all posting templates
$errors = "";
$obMessage = new \CEventMessage;
$obPosting = new \CPosting;
$rsMessages = $obMessage->GetList($by = "id", $order = "asc", $arFilter);
while ($arMessage = $rsMessages->Fetch()) {
$arPostFields = array(
"FROM_FIELD" => $this->ReplaceTemplate($arMessage["EMAIL_FROM"], $arFields),
"TO_FIELD" => $this->ReplaceTemplate($arMessage["EMAIL_TO"], $arFields),
"DIRECT_SEND" => "Y",
"BCC_FIELD" => $this->ReplaceTemplate($arMessage["EMAIL_TO"], $arFields),
"SUBJECT" => $this->ReplaceTemplate($arMessage["SUBJECT"], $arFields),
"BODY_TYPE" => $arMessage["BODY_TYPE"],
"BODY" => $this->ReplaceTemplate($arMessage["MESSAGE"], $arFields),
"STATUS" => "D"
);
$ID = $obPosting->Add($arPostFields);
if ($ID) {
$obPosting->ChangeStatus($ID, "P");
$obPosting->AutoSend($ID);
} else {
$errors .= $obPosting->LAST_ERROR . "\n";
}
}
<...>
}
<...>
}[/CODE]Выпуски успешно добавляются, письма уходят. Есть только одна проблема: при отправке таким образом письмо уходит с пустым заголовком, а если отправить его вручную из рассылок, то заголовок есть. Подскажите, пожалуйста, как это исправить. Или другой способ, если есть.
Возникла необходимость рассылки писем по почтовым шаблонам с логированием отправки. Решил организовать это, пуская письма через модуль рассылки, расширив класс CEvent:[CODE]namespace CSN;
class CEvent extends \CEvent
{
<...>
function SendIssue($event, $lid, $arFields, $message_id = "") {
$ID = "";
$arFields = array_merge($arFields, $this->GetSiteFieldsArray($lid)); // Adding stndard fields for replacement
// Declare filter for posting templates
$arFilter = array("TYPE_ID" => $event);
if ($message_id) $arFilter["ID"] = $message_id;
// Process all posting templates
$errors = "";
$obMessage = new \CEventMessage;
$obPosting = new \CPosting;
$rsMessages = $obMessage->GetList($by = "id", $order = "asc", $arFilter);
while ($arMessage = $rsMessages->Fetch()) {
$arPostFields = array(
"FROM_FIELD" => $this->ReplaceTemplate($arMessage["EMAIL_FROM"], $arFields),
"TO_FIELD" => $this->ReplaceTemplate($arMessage["EMAIL_TO"], $arFields),
"DIRECT_SEND" => "Y",
"BCC_FIELD" => $this->ReplaceTemplate($arMessage["EMAIL_TO"], $arFields),
"SUBJECT" => $this->ReplaceTemplate($arMessage["SUBJECT"], $arFields),
"BODY_TYPE" => $arMessage["BODY_TYPE"],
"BODY" => $this->ReplaceTemplate($arMessage["MESSAGE"], $arFields),
"STATUS" => "D"
);
$ID = $obPosting->Add($arPostFields);
if ($ID) {
$obPosting->ChangeStatus($ID, "P");
$obPosting->AutoSend($ID);
} else {
$errors .= $obPosting->LAST_ERROR . "\n";
}
}
<...>
}
<...>
}[/CODE]Выпуски успешно добавляются, письма уходят. Есть только одна проблема: при отправке таким образом письмо уходит с пустым заголовком, а если отправить его вручную из рассылок, то заголовок есть. Подскажите, пожалуйста, как это исправить. Или другой способ, если есть.