• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/integration/mail/externaluserprovider.php
  • Класс: BitrixTasksIntegrationMailExternalUserProvider
  • Вызов: ExternalUserProvider::sendEmail
private function sendEmail(Message $message, string $eventId, string $siteId, string $subjPrefix, string $threadMessageId): void
{
	$metadata = $message->getMetaData();
	$entityCode = $metadata->getEntityCode();
	$entityOperation = $metadata->getEntityOperation();
	$task = $metadata->getTask();
	$sender = $message->getSender();
	$pathToTask = BitrixTasksIntegrationMailTask::getDefaultPublicPath($task->getId());
	$authorName = str_replace(['<', '>', '"'], '', BitrixTasksUtilUser::formatName([
		'ID' => $sender->getId(),
		'NAME' => $sender->getName(),
		'LAST_NAME' => $sender->getLastName(),
		'SECOND_NAME' => $sender->getSecondName(),
	], $siteId));

	$receiversData = BitrixTasksIntegrationMailUser::getData([$message->getRecepient()->getId()], $siteId);
	if(empty($receiversData))
	{
		return; // nowhere to send
	}

	foreach ($receiversData as $userId => $arUser)
	{
		$email = $arUser['EMAIL'];
		$nameFormatted = str_replace(['<', '>', '"'], '', $arUser['NAME_FORMATTED']);

		$replyTo = BitrixTasksIntegrationMailTask::getReplyTo(
			$userId,
			$task->getId(),
			$pathToTask,
			$siteId
		);

		if ($replyTo == '')
		{
			return;
		}

		$e = [
			"=Reply-To" => $authorName.' <'.$replyTo.'>',
			"=Message-Id" => $threadMessageId,
			"EMAIL_FROM" => $authorName.' <'.BitrixTasksIntegrationMail::getDefaultEmailFrom($siteId).'>',
			"EMAIL_TO" => (!empty($nameFormatted) ? ''.$nameFormatted.' <'.$email.'>' : $email),

			"TASK_ID" => $task->getId(),
			"TASK_COMMENT_ID" => $metadata->getCommentId(),
			"TASK_TITLE" => trim($task->getTitle()),
			"TASK_PREVIOUS_FIELDS" => BitrixTasksUtilType::serializeArray($metadata->getPreviousFields()),

			"RECIPIENT_ID" => $userId,
			"USER_ID" => BitrixTasksUtilUser::getAdminId(),

			"URL" => $pathToTask,
			"SUBJECT" => $subjPrefix . trim($task->getTitle())
		];

		if (!(EntityCode::CODE_TASK === $entityCode && EntityOperation::ADD === $entityOperation))
		{
			$e['=In-Reply-To'] = BitrixTasksIntegrationMail::formatThreadId('TASK_'.$task->getId(), $siteId);
		}

		CEvent::Send(
			$eventId,
			$siteId,
			$e
		);
	}
}