• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/tasknotifications.php
  • Класс: CTaskNotifications
  • Вызов: CTaskNotifications::notifyByMail
static function notifyByMail(array $message, array $site)
{
	if (
		!is_array($message)
		|| !isset($message["ENTITY_CODE"])
		|| !isset($message["FROM_USER_ID"])
		|| !isset($message["TASK_ID"])
		|| !isset($message["TO_USER_IDS"])
		|| !is_array($message["TO_USER_IDS"])
		|| empty($message["TO_USER_IDS"])
	)
	{
		return false;
	}

	if (!BitrixTasksIntegrationMail::isInstalled())
	{
		return false;
	}

	if(!is_array($message["TO_USER_IDS"]) || empty($message["TO_USER_IDS"]))
	{
		return false;
	}

	// ids
	$authorId = (int)$message["FROM_USER_ID"];
	$taskId = (int)$message["TASK_ID"];

	// check event type
	$entityCode = trim($message["ENTITY_CODE"]);
	$entityOperation = trim($message["ENTITY_OPERATION"]);

	// site detect
	if(!is_array($site) || empty($site) || empty($site["SITE_ID"]))
	{
		$site = BitrixTasksUtilSite::get(SITE_ID);
	}
	if(empty($site["SITE_ID"])) // no way, this cant be true
	{
		return false;
	}
	$siteId = $site["SITE_ID"];

	// event type
	$eventId = false;
	$threadMessageId = false;
	$prevFields = array();
	$commentId = 0;
	$taskTitle = '';
	$subjPrefix = '';
	if($entityCode === 'TASK')
	{
		if($entityOperation === 'ADD' || $entityOperation === 'UPDATE')
		{
			$eventId = 'TASKS_TASK_'.$entityOperation.'_EMAIL';
			$threadMessageId = BitrixTasksIntegrationMail::formatThreadId('TASK_'.$taskId, $siteId);
		}

		if($entityOperation === 'UPDATE')
		{
			$threadMessageId = BitrixTasksIntegrationMail::formatThreadId(
				sprintf('TASK_UPDATE_%u_%x%x', $taskId, time(), rand(0, 0xffffff)),
				$siteId
			);

			$prevFields = $message["EVENT_DATA"]['arChanges'];
			$subjPrefix = BitrixTasksIntegrationMail::getSubjectPrefix();
		}

		if($message["EVENT_DATA"]["arFields"])
		{
			$taskTitle = trim($message["EVENT_DATA"]["arFields"]['TITLE']);
		}
	}
	elseif($entityCode === 'COMMENT')
	{
		if($entityOperation === 'ADD')
		{
			$eventId = 'TASKS_TASK_COMMENT_ADD_EMAIL';

			$commentId = $message["EVENT_DATA"]['MESSAGE_ID'];
			if(!$commentId)
			{
				// unable to identify comment id, exit
				return false;
			}

			$threadMessageId = BitrixTasksIntegrationMail::formatThreadId('TASK_COMMENT_'.$commentId, $siteId);
			$subjPrefix = BitrixTasksIntegrationMail::getSubjectPrefix();
		}

		if($message["ADDITIONAL_DATA"]['TASK_DATA'])
		{
			$taskTitle = trim($message["ADDITIONAL_DATA"]['TASK_DATA']['TITLE']);
		}
	}
	if($eventId === false)
	{
		return false; // unknown action
	}

	// email letter data
	$pathToTask = BitrixTasksIntegrationMailTask::getDefaultPublicPath($taskId);

	$users = static::getUsers(array_merge(array($authorId), $message["TO_USER_IDS"]));
	foreach($users as $i => $user)
	{
		$users[$i]['NAME_FORMATTED'] = User::formatName($users[$i], $siteId);
	}

	$receiversData = BitrixTasksIntegrationMailUser::getData($message["TO_USER_IDS"], $siteId);
	if(empty($receiversData))
	{
		return false; // nowhere to send
	}

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

		$replyTo = BitrixTasksIntegrationMailTask::getReplyTo(
			$userId,
			$taskId,
			$pathToTask,
			$siteId
		);
		if ($replyTo != '')
		{
			$authorName = str_replace(array('<', '>', '"'), '', $users[$authorId]['NAME_FORMATTED']);

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

				"TASK_ID" => $taskId,
				"TASK_COMMENT_ID" => $commentId,
				"TASK_TITLE" => $taskTitle,
				"TASK_PREVIOUS_FIELDS" => BitrixTasksUtilType::serializeArray($prevFields),

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

				"URL" => $pathToTask,
				"SUBJECT" => $subjPrefix.$taskTitle
			);

			if (!('TASK' === $entityCode && 'ADD' === $entityOperation))
			{
				$e['=In-Reply-To'] = BitrixTasksIntegrationMail::formatThreadId('TASK_'.$taskId, $siteId);
			}

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