• Модуль: mail
  • Путь к файлу: ~/bitrix/modules/mail/lib/integration/intranet/secretary.php
  • Класс: BitrixMailIntegrationIntranetSecretary
  • Вызов: Secretary::getMessageUrl
static function getMessageUrl(int $messageId, string $entityType, int $entityId, ?int $userId = null): ?string
{
	$message = MailMessageTable::getList([
		'select' => [
			'*',
			'MAILBOX_EMAIL' => 'MAILBOX.EMAIL',
			'MAILBOX_NAME' => 'MAILBOX.NAME',
			'MAILBOX_LOGIN' => 'MAILBOX.LOGIN',
		],
		'filter' => [
			'=ID' => $messageId,
		],
	])->fetch();

	if (!$message)
	{
		return null;
	}

	$filter = [
		'=MAILBOX_ID' => $message['MAILBOX_ID'],
		'=MESSAGE_ID' => $message['ID'],
		// '=ENTITY_UF_ID' => $userField['ID'],
	];

	if ($entityType)
	{
		$filter['=ENTITY_TYPE'] = $entityType;
		$filter['=ENTITY_ID'] = $entityId;
	}

	$access = MessageAccessTable::getList([
		'filter' => $filter,
		'limit' => 1,
	])->fetch();

	if (!$access)
	{
		return null;
	}

	BitrixMailHelperMessage::prepare($message);

	$signer = new BitrixMainSecuritySignSigner(new BitrixMainSecuritySignHmacAlgorithm('md5'));

	$message['__href'] = CHTTP::urlAddParams(
		$message['__href'],
		array(
			'mail_uf_message_token' => sprintf(
				'%s:%s',
				$access['TOKEN'],
				$signer->getSignature($access['SECRET'], Message::getSaltByEntityType($entityType, $entityId, $userId))
			),
		),
		array(
			'encode' => true,
		)
	);

	return $message['__href'];
}