• Модуль: messageservice
  • Путь к файлу: ~/bitrix/modules/messageservice/lib/message.php
  • Класс: BitrixMessageServiceMessage
  • Вызов: Message::sendDirectly
public function sendDirectly(): ResultSendMessage
{
	global $USER;

	$checkResult = $this->checkFields();

	if (!$checkResult->isSuccess())
	{
		$result = new ResultSendMessage();
		return $result->addErrors($checkResult->getErrors());
	}

	if ($this->checkRestrictions)
	{
		$restrictionManager = new RestrictionManager($this);
		if (!$restrictionManager->isCanSendMessage())
		{
			return (new ResultSendMessage)->addError(
				new Error(Loc::getMessage('MESSAGESERVICE_MESSAGE_ERROR_RESTRICTION'))
			);
		}
	}

	$sender = $this->getSender();

	if (!SenderLimitation::checkDailyLimit($sender->getId(), $this->getFrom()))
	{
		$result = new ResultSendMessage();
		$result->addError(new Error(Loc::getMessage('MESSAGESERVICE_MESSAGE_ERROR_LIMITATION')));
		$result->setStatus(MessageStatus::DEFERRED);

		return $result;
	}

	$headers = $this->getHeaders();
	$messageFields = [
		'TYPE' => $this->getType(),
		'SENDER_ID' => $sender->getId(),
		'AUTHOR_ID' => $this->getAuthorId(),
		'MESSAGE_FROM' => $this->getFrom(),
		'MESSAGE_TO' => $this->getTo(),
		'MESSAGE_HEADERS' => count($headers) > 0 ? $headers : null,
		'MESSAGE_BODY' => $this->getBody(),
		'CLUSTER_GROUP' => defined('BX_CLUSTER_GROUP') ? BX_CLUSTER_GROUP : null
	];

	$sender->setSocketTimeout(5);
	$sender->setStreamTimeout(15);

	$result = $sender->sendMessage($messageFields);

	$messageFields['DATE_EXEC'] = new DateTime();
	$messageFields['SUCCESS_EXEC'] = $result->isSuccess() ? 'Y' : 'N';

	if ($result->getExternalId() !== null)
	{
		$messageFields['EXTERNAL_ID'] = $result->getExternalId();
	}
	if ($result->getStatus() !== null)
	{
		$messageFields['STATUS_ID'] = $result->getStatus();
	}

	$addResult = InternalEntityMessageTable::add($messageFields);
	if (!$addResult->isSuccess())
	{
		$result->addErrors($addResult->getErrors());
		$result->setStatus(MessageStatus::ERROR);

		return $result;
	}

	$this->id = $addResult->getId();
	$result->setId($this->id);

	if (MainConfigOption::get('messageservice', 'event_log_message_send', 'N') === 'Y')
	{
		$userId = is_object($USER) ? $USER->getId() : 0;
		CEventLog::Log('INFO', 'MESSAGE_SEND', 'messageservice', $userId, $this->getTo());
	}

	return $result;
}