Проверка email в 1С-Битрикс: как защитить магазин от фиктивных заказов

Какие проблемы решает верификация email? Потеря контакта из-за опечатки: клиент не получит письмо с трекингом или чеком, а вы потеряете заказ. Мы решаем это внедрением проверки email на нескольких уровнях. Мошенничество: одноразовые email-адреса часто используются для атак или возвратов без товар
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Проверка email в 1С-Битрикс: как защитить магазин от фиктивных заказов
Простой
~1 день

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1389
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    979
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    714
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    852
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    751
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1108

Какие проблемы решает верификация email?

Потеря контакта из-за опечатки: клиент не получит письмо с трекингом или чеком, а вы потеряете заказ. Мы решаем это внедрением проверки email на нескольких уровнях. Мошенничество: одноразовые email-адреса часто используются для атак или возвратов без товара — каждый такой заказ приносит прямые убытки. Снижение доставляемости: отправка на несуществующий домен вредит репутации отправителя.

Проверка только по формату ловит лишь 30% ошибок, добавление MX-записи повышает точность до 95% — в 3 раза эффективнее. А блокировка одноразовых доменов отсекает 5–10% потенциально проблемных заказов, что экономит бюджет на возвратах и поддержке.

Почему синтаксической проверки недостаточно?

Только форматная проверка через filter_var не ловит домены без почты ([email protected]) и временные адреса. Поэтому мы добавляем проверку MX-записи домена и блокировку одноразовых доменов. Обязательным этапом является блокировка одноразовых доменов. Это повышает точность до 95% без отправки письма.

Что даёт проверка MX-записи?

MX-запись (Mail Exchange) указывает, какой сервер принимает почту для домена. Если записи нет — отправка письма на этот домен невозможна. Проверка через getmxrr() занимает 50–500 мс. Мы кешируем результат по домену на 1 час, чтобы не замедлять оформление заказа. Подробнее о MX-записи можно прочитать в документации.

Согласно документации 1С-Битрикс, события модуля продаж позволяют перехватывать оформление заказа.

Два уровня верификации

Синтаксическая проверка — минимальная валидация формата и DNS MX-записи домена. Быстрая, без отправки письма, ловит опечатки и несуществующие домены.

Полная верификация через ссылку — отправляем письмо со ссылкой, пользователь переходит, подтверждает. Надёжна, но требует шага от пользователя. Для заказов чаще всего достаточно первого уровня с возможностью включить второй для подозрительных адресов.

Сравнение уровней

Параметр Синтаксис + MX Полная верификация
Скорость Мгновенно 1-2 минуты (ожидание письма)
Точность ~95% ~99%
Отсев одноразовых доменов Да Да
Подтверждение владения Нет Да
Дополнительные затраты Нет Разработка шаблона письма

Реализация синтаксической проверки с MX

namespace Local\Validation; class EmailValidator { public static function validate(string $email): ValidationResult { // Формат if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { return new ValidationResult(false, 'Неверный формат email'); } $domain = strtolower(substr(strrchr($email, '@'), 1)); // Одноразовые домены if (self::isDisposable($domain)) { return new ValidationResult(false, 'Временные email-адреса не принимаются'); } // Проверка MX-записи if (!self::hasMxRecord($domain)) { return new ValidationResult(false, 'Домен не принимает почту'); } return new ValidationResult(true, ''); } private static function isDisposable(string $domain): bool { $disposable = [ 'mailinator.com', 'guerrillamail.com', 'tempmail.com', 'throwam.com', 'yopmail.com', '10minutemail.com', 'trashmail.com', 'dispostable.com', 'fakeinbox.com', 'getairmail.com', 'sharklasers.com', ]; return in_array($domain, $disposable, true); } private static function hasMxRecord(string $domain): bool { return (bool)@getmxrr($domain, $mxHosts); } } 

Применение в обработчике заказа

AddEventHandler('sale', 'OnBeforeOrderFinalAction', function(\Bitrix\Sale\Order $order) { if ($order->getId() > 0) return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS); $props = $order->getPropertyCollection(); $email = trim($props->getItemByOrderPropertyCode('EMAIL')?->getValue() ?? ''); if (empty($email)) { return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::ERROR, new \Bitrix\Main\Error('Укажите email для получения подтверждения заказа') ); } $result = \Local\Validation\EmailValidator::validate($email); if (!$result->isValid()) { return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::ERROR, new \Bitrix\Main\Error($result->getError()) ); } return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS); }); 

Полная верификация через ссылку (для авторизованных)

namespace Local\Validation; class EmailVerificationService { public static function sendVerification(int $userId, string $email): bool { $token = bin2hex(random_bytes(32)); $exp = time() + 86400; // 24 часа // Сохраняем токен $hlEntity = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity( \Bitrix\Highloadblock\HighloadBlockTable::getById(EMAIL_VERIFY_HLBLOCK_ID)->fetch() ); $hlEntity->getDataClass()::add([ 'UF_USER_ID' => $userId, 'UF_EMAIL' => $email, 'UF_TOKEN' => $token, 'UF_EXPIRES' => \Bitrix\Main\Type\DateTime::createFromTimestamp($exp), 'UF_CONFIRMED' => false, ]); // Отправляем письмо $verifyUrl = 'https://' . SITE_SERVER_NAME . '/local/verify-email.php?token=' . $token; return \CEvent::Send('EMAIL_VERIFICATION', SITE_ID, [ 'EMAIL' => $email, 'VERIFY_URL' => $verifyUrl, 'EXPIRES_AT' => date('d.m.Y H:i', $exp), ]); } public static function confirmToken(string $token): bool { $hlEntity = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity( \Bitrix\Highloadblock\HighloadBlockTable::getById(EMAIL_VERIFY_HLBLOCK_ID)->fetch() ); $dataClass = $hlEntity->getDataClass(); $row = $dataClass::getRow([ 'filter' => [ 'UF_TOKEN' => $token, 'UF_CONFIRMED' => false, '>=UF_EXPIRES' => new \Bitrix\Main\Type\DateTime(), ], 'select' => ['ID', 'UF_USER_ID'], ]); if (!$row) return false; $dataClass::update($row['ID'], ['UF_CONFIRMED' => true]); // Обновляем флаг в профиле пользователя \CUser::Update($row['UF_USER_ID'], ['UF_EMAIL_VERIFIED' => 'Y']); return true; } } 

Как ускорить проверку email на клиенте?

Быстрая обратная связь до отправки формы — проверяем синтаксис и показываем подсказку. AJAX-запрос на сервер проверяет MX и одноразовые домены. Это улучшает пользовательский опыт и снижает число неправильно введённых адресов.

const emailInput = document.querySelector('[name="ORDER_EMAIL"]'); emailInput?.addEventListener('blur', async () => { const email = emailInput.value.trim(); if (!email) return; // Синтаксическая проверка на клиенте const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(email)) { showFieldError(emailInput, 'Проверьте правильность email'); return; } // Проверка на сервере (MX + disposable) const res = await fetch('/local/ajax/validate-email.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email }), }).then(r => r.json()); if (!res.valid) { showFieldError(emailInput, res.error); } else { clearFieldError(emailInput); } }); 
// /local/ajax/validate-email.php \Bitrix\Main\Application::getInstance()->initializeExtended(); $email = json_decode(file_get_contents('php://input'), true)['email'] ?? ''; $result = \Local\Validation\EmailValidator::validate($email); header('Content-Type: application/json'); echo json_encode(['valid' => $result->isValid(), 'error' => $result->getError()]); 

Производительность

MX-запрос через getmxrr() занимает 50-500 мс. При медленном DNS-резолвере — до 2 секунд. Если это критично: кешируем результат по домену на 1 час, выполняем проверку асинхронно (после ввода email, не при сабмите формы).

Полный список одноразовых доменов (более 20)
  • mailinator.com
  • guerrillamail.com
  • tempmail.com
  • throwam.com
  • yopmail.com
  • 10minutemail.com
  • trashmail.com
  • dispostable.com
  • fakeinbox.com
  • getairmail.com
  • sharklasers.com
  • и другие...

Как выбрать уровень верификации для вашего магазина?

Учитывайте объём заказов и средний чек. Если у вас высок риск мошенничества (дорогие товары или цифровые услуги) — сразу подключайте полную верификацию через ссылку. Для масс-маркета с высоким трафиком достаточно синтаксической проверки с MX. В любом случае, блокировка одноразовых доменов — стандарт безопасности.

В одном проекте с каталогом на 50 000 товаров мы внедрили минимальный уровень и получили снижение возвратов на 15% за первый месяц — это прямая экономия бюджета.

Процесс внедрения верификации

  1. Анализ текущей формы заказа и регистрации, выявление максимальной нагрузки.
  2. Выбор уровня — синтаксис + MX или с подтверждением.
  3. Разработка класса EmailValidator и обработчика события.
  4. Интеграция с корзиной, добавление клиентской валидации.
  5. Тестирование — проверка на реальных email (валидные, невалидные, одноразовые).
  6. Деплой — выгрузка на боевой сервер, мониторинг ошибок.

Что входит в работу

  • Исходный код модуля валидации с комментариями.
  • Настройка событий OnBeforeOrderFinalAction и OnBeforeUserRegister.
  • Документация по поддержке и расширению списка одноразовых доменов.
  • Консультация по настройке кэширования MX-запросов.

Сроки реализации

Конфигурация Срок
Синтаксис + одноразовые домены + MX 1–2 дня
+ верификация через ссылку в письме +2–3 дня
+ клиентская валидация с AJAX +1 день

Наша команда имеет опыт разработки на 1С-Битрикс, выполнила более 150 интеграций платёжных систем и верификаций. Мы гарантируем корректную работу на высоконагруженных проектах.

Закажите внедрение верификации email для вашего интернет-магазина. Получите консультацию по настройке под ваши задачи — мы поможем выбрать оптимальный уровень и реализуем за 1–5 дней.