56 if (!array_key_exists(
'FIELDS', $arMessageParams))
58 throw new \Bitrix\Main\ArgumentTypeException(
"FIELDS");
60 if (!array_key_exists(
'MESSAGE', $arMessageParams))
62 throw new \Bitrix\Main\ArgumentTypeException(
"MESSAGE");
64 if (!array_key_exists(
'SITE', $arMessageParams))
66 throw new \Bitrix\Main\ArgumentTypeException(
"SITE");
68 if (!array_key_exists(
'CHARSET', $arMessageParams))
70 throw new \Bitrix\Main\ArgumentTypeException(
"CHARSET");
73 $this->eventFields = $arMessageParams[
'FIELDS'];
74 if (array_key_exists(
'EVENT', $arMessageParams))
76 $this->
event = $arMessageParams[
'EVENT'];
77 $this->languageId = $this->
event[
'LANGUAGE_ID'] ??
null;
80 $this->eventMessageFields = $arMessageParams[
'MESSAGE'];
81 if (array_key_exists(
'ID', $arMessageParams[
'MESSAGE']))
83 $this->eventMessageId = $arMessageParams[
'MESSAGE'][
'ID'];
87 is_array($arMessageParams[
'SITE'])
88 ? $arMessageParams[
'SITE']
89 : [$arMessageParams[
'SITE']]
91 $this->eventSiteFields = array_merge($this->siteFields, $this->eventFields);
92 foreach ($this->eventSiteFields as
$k => $v)
94 $this->eventSiteFields[
$k] = static::getFieldFlatValue($v);
128 $isHtml = $this->eventMessageFields[
"BODY_TYPE"] ==
"html";
131 $message = $this->eventMessageFields[
"MESSAGE_PHP"];
132 if (empty(
$message) && !empty($this->eventMessageFields[
"MESSAGE"]))
134 $message = MailInternal\EventMessageTable::replaceTemplateToPhp($this->eventMessageFields[
"MESSAGE"]);
135 if ($this->eventMessageFields[
"ID"] > 0)
137 MailInternal\EventMessageTable::update($this->eventMessageFields[
"ID"], [
'MESSAGE_PHP' =>
$message]);
141 if (!empty($this->eventMessageFields[
'SITE_TEMPLATE_ID']))
143 $siteTemplateId = $this->eventMessageFields[
'SITE_TEMPLATE_ID'];
147 $siteTemplateId =
null;
152 if (empty($siteTemplateId))
154 $siteTemplateId =
".default";
158 $themeCompiler->setSiteTemplateId($siteTemplateId);
159 $themeCompiler->setSiteId($this->siteId);
160 $themeCompiler->setLanguageId($this->languageId);
161 Loc::setCurrentLang($themeCompiler->getLanguageId());
167 foreach ($this->eventSiteFields as $fieldKey => $fieldValue)
171 if (!str_contains($fieldValue,
"<"))
180 'CODE' => mb_strtolower(trim(explode(
',', $this->
getMailTo())[0])),
181 'EVENT_NAME' => $this->eventMessageFields[
"EVENT_NAME"],
186 $themeCompiler->execute();
188 $message = $themeCompiler->getResult();
192 Loc::setCurrentLang(
null);
238 $eventMessageAttachment = [];
239 $eventFilesContent = [];
242 if (array_key_exists(
'FILE', $this->eventMessageFields))
244 $eventMessageAttachment = $this->eventMessageFields[
"FILE"];
247 if (array_key_exists(
'FILES_CONTENT', $this->event))
249 $eventFilesContent = $this->
event[
"FILES_CONTENT"];
253 if (isset($this->event[
"FILE"]) && is_array($this->event[
"FILE"]))
256 foreach ($this->event[
"FILE"] as $fileId)
258 if (is_numeric($fileId))
260 $eventFileList[] = $fileId;
264 $eventMessageAttachment = array_merge($eventMessageAttachment, $eventFileList);
267 if (!empty($eventMessageAttachment))
269 $attachFileList = [];
270 $eventMessageAttachment = array_unique($eventMessageAttachment);
272 $strId = implode(
',', $eventMessageAttachment);
274 $strSql =
"SELECT * FROM b_file WHERE ID IN(" . $strId .
")";
275 $resultDb = $conn->query($strSql);
276 while ($file = $resultDb->fetch())
278 $tempFile = \CFile::MakeFileArray($file[
"ID"]);
279 $attachFileList[] = [
280 'PATH' => $tempFile[
'tmp_name'],
282 'CONTENT_TYPE' => $file[
'CONTENT_TYPE'],
283 'NAME' => ($file[
'ORIGINAL_NAME'] <>
"" ? $file[
'ORIGINAL_NAME'] : $file[
'FILE_NAME']),
287 $this->mailAttachment = $attachFileList;
290 if (!empty($eventFilesContent))
292 foreach ($eventFilesContent as $item)
294 $this->mailAttachment[] = [
295 'CONTENT_TYPE' => $item[
'CONTENT_TYPE'],
296 'NAME' => $item[
'NAME'],
297 'CONTENT' => $item[
'CONTENT'],
299 'CHARSET' => $item[
'CHARSET'],
300 'METHOD' => $item[
'METHOD'],
503 if (!empty($this->eventMessageId))
505 $messageSiteDb = MailInternal\EventMessageSiteTable::getList([
506 'select' => [
'SITE_ID'],
508 '=EVENT_MESSAGE_ID' => $this->eventMessageId,
512 if ($arMessageSite = $messageSiteDb->Fetch())
514 $site_id = $arMessageSite[
'SITE_ID'];
518 $globalName =
$GLOBALS[
"SERVER_NAME"] ??
'';
521 $DEFAULT_EMAIL_FROM =
Config\Option::get(
"main",
"email_from",
"admin@" . $globalName);
526 if ($arSite =
$result->fetch())
528 $this->siteId = $arSite[
'LID'];
529 if ($this->languageId ===
null)
531 $this->languageId = $arSite[
'LANGUAGE_ID'];
534 \CEvent::$EVENT_SITE_PARAMS[
$site_id] = [
535 "SITE_NAME" => ($arSite[
"SITE_NAME"] <>
'' ? $arSite[
"SITE_NAME"] : $SITE_NAME),
536 "SERVER_NAME" => ($arSite[
"SERVER_NAME"] <>
'' ? $arSite[
"SERVER_NAME"] : $SERVER_NAME),
537 "DEFAULT_EMAIL_FROM" => ($arSite[
"EMAIL"] <>
'' ? $arSite[
"EMAIL"] : $DEFAULT_EMAIL_FROM),
538 "LANGUAGE_ID" => $arSite[
'LANGUAGE_ID'],
539 "SITE_ID" => $arSite[
'LID'],
540 "SITE_DIR" => $arSite[
'DIR'],
542 return \CEvent::$EVENT_SITE_PARAMS[
$site_id];
547 "SITE_NAME" => $SITE_NAME,
548 "SERVER_NAME" => $SERVER_NAME,
549 "DEFAULT_EMAIL_FROM" => $DEFAULT_EMAIL_FROM,