• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/mail/sender.php
  • Класс: BitrixMainMailSender
  • Вызов: Sender::add
static function add(array $fields)
{
	if (empty($fields['OPTIONS']) || !is_array($fields['OPTIONS']))
	{
		$fields['OPTIONS'] = array();
	}

	self::checkEmail($fields, $error, $errors);
	if ($error || $errors)
	{
		return array('error' => $error, 'errors' => $errors);
	}

	if (empty($fields['IS_CONFIRMED']))
	{
		$fields['OPTIONS']['confirm_code'] = BitrixMainSecurityRandom::getStringByCharsets(5, '0123456789abcdefghjklmnpqrstuvwxyz');
		$fields['OPTIONS']['confirm_time'] = time();
	}

	$senderId = 0;
	$result = InternalSenderTable::add($fields);
	if ($result->isSuccess())
	{
		$senderId = $result->getId();
	}

	if (empty($fields['IS_CONFIRMED']))
	{
		$mailEventFields = array(
			'DEFAULT_EMAIL_FROM' => $fields['EMAIL'],
			'EMAIL_TO' => $fields['EMAIL'],
			'MESSAGE_SUBJECT' => getMessage('MAIN_MAIL_CONFIRM_MESSAGE_SUBJECT'),
			'CONFIRM_CODE' => mb_strtoupper($fields['OPTIONS']['confirm_code']),
		);

		if (!empty($smtpConfig))
		{
			BitrixMainEventManager::getInstance()->addEventHandlerCompatible(
				'main',
				'OnBeforeEventSend',
				function (&$eventFields, &$message, $context) use (&$smtpConfig)
				{
					$context->setSmtp($smtpConfig);
				}
			);
		}

		CEvent::sendImmediate('MAIN_MAIL_CONFIRM_CODE', SITE_ID, $mailEventFields);
	}
	else
	{
		if (isset($fields['OPTIONS']['__replaces']) && $fields['OPTIONS']['__replaces'] > 0)
		{
			InternalSenderTable::delete(
				(int) $fields['OPTIONS']['__replaces']
			);
		}
	}

	return ['senderId' => $senderId, 'confirmed' => !empty($fields['IS_CONFIRMED'])];
}