- Модуль: 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'])];
}