• Модуль: mail
  • Путь к файлу: ~/bitrix/modules/mail/lib/user.php
  • Класс: BitrixMailUser
  • Вызов: User::sendEventAgent
static function sendEventAgent($messageId = 0, $cnt = 0)
{
	$messageId = intval($messageId);
	if ($messageId <= 0)
	{
		return;
	}

	$res = UserMessageTable::getList(array(
		'filter' => array(
			'=ID' => $messageId
		)
	));
	if ($messageFields = $res->fetch())
	{
		if (intval($cnt) > 10)
		{
			if (MainLoader::includeModule('im'))
			{
				$title = trim($messageFields['SUBJECT']);
				if ($title == '')
				{
					$title = trim($messageFields['CONTENT']);
					$title = preg_replace("/[ATTACHMENTs*=s*[^]]*]/is".BX_UTF_PCRE_MODIFIER, "", $title);

					$CBXSanitizer = new CBXSanitizer;
					$CBXSanitizer->delAllTags();
					$title = $CBXSanitizer->sanitizeHtml($title);
				}

				CIMNotify::add(array(
					"MESSAGE_TYPE" => IM_MESSAGE_SYSTEM,
					"NOTIFY_TYPE" => IM_NOTIFY_SYSTEM,
					"NOTIFY_MODULE" => "mail",
					"NOTIFY_EVENT" => "user_message_failed",
					"TO_USER_ID" => $messageFields['USER_ID'],
					"NOTIFY_MESSAGE" => Loc::getMessage("MAIL_USER_MESSAGE_FAILED", array(
						"#TITLE#" => $title
					))
				));
			}
			UserMessageTable::delete($messageId);
			return;
		}

		switch ($messageFields['TYPE'])
		{
			case 'rpl':
				$eventId = sprintf('onReplyReceived%s', $messageFields['ENTITY_TYPE']);
				break;
			case 'fwd':
				$eventId = sprintf('onForwardReceived%s', $messageFields['ENTITY_TYPE']);
				break;
		}

		if (!empty($eventId))
		{
			$attachments = array();
			if (!empty($messageFields['ATTACHMENTS']))
			{
				$tmpAttachments = unserialize($messageFields['ATTACHMENTS'], ['allowed_classes' => false]);
				if (is_array($tmpAttachments))
				{
					foreach($tmpAttachments as $key => $uploadFile)
					{
						$file = CFile::makeFileArray($uploadFile);
						if (
							is_array($file)
							&& !empty($file)
						)
						{
							$file['name'] = $key;
							$attachments[$key] = $file;
						}
					}
				}
			}

			$event = new MainEvent(
				'mail', $eventId,
				array(
					'site_id'     => $messageFields['SITE_ID'],
					'entity_id'   => $messageFields['ENTITY_ID'],
					'from'        => $messageFields['USER_ID'],
					'subject'     => $messageFields['SUBJECT'],
					'content'     => $messageFields['CONTENT'],
					'attachments' => $attachments
				)
			);
			$event->send();

			foreach ($event->getResults() as $eventResult)
			{
				if ($eventResult->getType() == BitrixMainEventResult::ERROR)
				{
					$cnt++;

					global $pPERIOD;
					$pPERIOD = 10 + (60 * $cnt);
					return "\Bitrix\Mail\User::sendEventAgent(".$messageId.", ".$cnt.");";
				}
			}

			UserMessageTable::delete($messageId);
		}
	}

	return;
}