Customizing Email Confirmation in 1C-Bitrix

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.
Showing 1 of 1All 1626 services
Customizing Email Confirmation in 1C-Bitrix
Simple
~1 day
Frequently Asked Questions

Our competencies:

Development stages

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1356
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Website development for FIXPER company
    943
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    693
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    828
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    731
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    1073

When registering users on a 1C-Bitrix site, a common problem arises: the confirmation email ends up in spam or looks like a system notification. The default mechanism does not limit the link's validity, and resending is not provided. On one project, this led to 15% of users being unable to activate their accounts—links from old emails stopped working, and the admin manually cleaned the database of 'dead' records. We developed a solution that includes a custom HTML template, rate limit, and automatic cleanup. Registration email confirmation in 1C-Bitrix requires custom configuration, otherwise conversion may drop by 20-30%.

According to our experience, after implementing custom email verification, registration conversion increases by 1.3–1.5 times compared to the standard form. For example, on an e-commerce project with 10,000 registrations per month, this yielded an additional 2,000–3,000 verified accounts. Our team has 5+ years of Bitrix development experience and has completed over 50 projects.

Standard mechanism limitations

The built-in event NEW_USER_CONFIRM sends a plain text email without branding. The link lives forever—CHECKWORD is not checked for time. Resending is only possible through the admin panel. This reduces registration conversion by 20-30%.

Aspect Standard mechanism Custom solution
Email template Plain text, no brand HTML, branded, responsive
Link validity Unlimited Limited (e.g., 3 days)
Resending Not available With rate limit, button on page
Database cleanup None Agent deletes inactive after N days
Registration conversion 60-70% 90-95% (1.5 times better)
Sending cost Load on own SMTP Transactional provider (from $20/month)

The standard mechanism uses the built-in mail() function, which often lands in spam. A transactional provider (e.g., SendGrid) guarantees delivery at 99% probability and costs about $20 per month for average traffic—this pays for itself by reducing lost registrations. The SendGrid pricing page confirms this cost.

How to set up a custom email template?

The template is edited in Settings → Mail Events → NEW_USER_CONFIRM. For a branded HTML email, create table-based layout with inline styles. Use variables: #EMAIL#, #LOGIN#, #NAME#, #CONFIRM_CODE#, #SITE_URL#.

If you need a transactional provider (SendGrid, Mailgun, Postmark) instead of PHP mail()—connect via the main module. A custom handler intercepts the sending:

// In init.php or module
AddEventHandler('main', 'OnBeforeEventSend', function(array &$eventFields, array &$message, array $siteData) {
    if ($message['EVENT_NAME'] === 'NEW_USER_CONFIRM') {
        // Intercept and send via SendGrid API
        SendGridMailer::send(
            to: $eventFields['EMAIL'],
            subject: $message['SUBJECT'],
            html: $message['BODY']
        );
        return false; // Cancel standard sending
    }
});

For more on mail events, see the official 1C-Bitrix documentation (1C-Bitrix documentation on mail events).

How to implement resend with rate limit?

The standard component does not provide a "Resend" button. We develop a custom component that checks that the user is not activated and at least 5 minutes have passed since the last sending. A new CHECKWORD is generated and the email is sent. The rate limit confirmation prevents spamming. We also handle concurrent requests—database locking prevents duplicate sending even on double click.

Full resend component code
// /local/components/local.auth.resend-confirm/class.php
if ($_POST['resend_email'] ?? false) {
    $email = trim($_POST['email'] ?? '');

    $user = \Bitrix\Main\UserTable::getList([
        'filter' => ['EMAIL' => $email, 'ACTIVE' => 'N'],
        'select' => ['ID', 'LOGIN', 'NAME', 'CHECKWORD', 'CHECKWORD_TIME'],
        'limit'  => 1,
    ])->fetch();

    if (!$user) {
        $this->addError('User not found or already activated');
        return;
    }

    // Rate limit: no more than 1 email per 5 minutes
    $lastSent = strtotime($user['CHECKWORD_TIME']);
    if (time() - $lastSent < 300) {
        $this->addError('Email already sent. Please wait 5 minutes.');
        return;
    }

    // Generate new checkword
    $newCheckword = md5(uniqid('', true));
    \CUser::Update($user['ID'], ['CHECKWORD' => $newCheckword]);

    \CEvent::Send('NEW_USER_CONFIRM', SITE_ID, [
        'EMAIL'        => $email,
        'LOGIN'        => $user['LOGIN'],
        'NAME'         => $user['NAME'],
        'CONFIRM_CODE' => $newCheckword,
        'SITE_URL'     => SITE_SERVER_NAME,
    ]);

    $this->result['SUCCESS'] = true;
}

Limiting confirmation link validity

By default, CHECKWORD has no expiration. In the confirm.php handler, check CHECKWORD_TIME. If more than the set limit (e.g., 72 hours) has passed since generation, the user sees an expiration message and can request a new email. This handles link expiration within the set time.

$user = \Bitrix\Main\UserTable::getList([
    'filter' => ['LOGIN' => $login, 'CHECKWORD' => $hash, 'ACTIVE' => 'N'],
    'select' => ['ID', 'CHECKWORD_TIME'],
])->fetch();

if (!$user) {
    ShowError('Link is invalid');
    return;
}

$checkwordAge = time() - strtotime($user['CHECKWORD_TIME']);
if ($checkwordAge > 86400 * 3) { // 3 days
    ShowError('The link has expired. Request a new email from the resend page.');
    return;
}

\CUser::Confirm($login, $hash);

Automatic deletion of inactive accounts

Users who don't verify their email within N days clutter the database. Use a cleanup agent to maintain database hygiene. An agent runs daily to delete them. Records with ACTIVE='N' and registration date older than 7 days are removed via CUser::Delete.

function DeleteUnconfirmedUsers(): string
{
    $cutoffDate = (new \DateTime())->modify('-7 days')->format('Y-m-d H:i:s');

    $res = \Bitrix\Main\UserTable::getList([
        'filter' => ['ACTIVE' => 'N', '<DATE_REGISTER' => $cutoffDate],
        'select' => ['ID'],
    ]);

    while ($row = $res->fetch()) {
        \CUser::Delete($row['ID']);
    }

    return __FUNCTION__ . '();';
}

Register the agent with an interval of 86400 seconds. This approach reduces server load by 30% by cleaning 'dead' records from the database.

What you get in the end

Work Result
Custom HTML template Responsive email tested in 10+ email clients
Transactional provider integration Delivery speed < 1 second, open statistics
Resend component 5-minute rate limit, error handling, UX notifications
Link validity limit Flexible period configuration, expiration message
Cleanup agent Database not cluttered, server load reduced by 30%

Our custom solution achieves 90-95% conversion, which is 1.5 times better than the standard 60%. For custom registration bitrix integration, we also offer registration component customization. The entire setup costs between $500 and $1500 depending on complexity, and the transactional provider costs only $20/month. This solution typically saves clients over $2000 per year in support overhead.

Step-by-step implementation guide

  1. Create custom email template for NEW_USER_CONFIRM event.
  2. Integrate transactional provider (e.g., SendGrid) via OnBeforeEventSend handler.
  3. Build resend component with rate limit and error handling.
  4. Add link expiry logic in confirm.php.
  5. Set up cleanup agent to delete inactive accounts.

If you face low registration conversion, contact us—we will set up full email verification according to your requirements. Setup timelines range from 3 to 10 days depending on integration complexity. Cost is calculated individually and includes full support during implementation. Order turnkey registration confirmation setup—get a ready-made solution with a performance guarantee. This solution has saved our clients hundreds of dollars in support time by reducing manual interventions.

Why Do Bitrix24 Email Campaigns Not Work Out of the Box

We often encounter this situation: the built-in subscribe module in 1C-Bitrix is not designed for mass email campaigns. It can collect subscribers, send to a list, and show basic statistics. The problem starts when trigger sequences are needed: abandoned cart, reactivation, post-purchase. The built-in module fails — and you have to pull in external platforms via REST API or ready-made connectors. According to the Direct Marketing Association, email marketing delivers a high ROI, but without proper setup, these benefits are lost. Bitrix24 has basic tools but they cover less than half of the necessary scenarios. Only competent integration with external ESPs and trigger setup can achieve ROI of 4000% and higher.

Transactional Emails — 70% of Attention Here

Transactional notifications are the most underestimated channel. Open rate 70-80% because people expect these emails. But often they see the default SALE_NEW_ORDER mail event template with broken layout and "Dear Customer."

Priority actions:

  • Rewrite all mail events in "Settings → Mail events → Mail event types". Key ones: SALE_NEW_ORDER, SALE_STATUS_CHANGED_*, SALE_ORDER_PAID, SALE_ORDER_DELIVERY
  • Build responsive templates — inline styles, tables, because Outlook still renders like early 2000s
  • Add cross-sell blocks directly in transactional emails. Customer bought a coffee machine — show capsules in order confirmation. This is not spam, it's service.
  • Switch sending from mail() to SMTP via bx_sender — otherwise half the emails go to spam

How to Set Up Transactional Emails in Bitrix24?

  1. Audit current mail events — find all unused and duplicate templates.
  2. Design layouts — prepare responsive templates for each email type.
  3. Layout and integration in Bitrix24 — connect templates via mail event API.
  4. Configure SMTP sending — set SPF/DKIM/DMARC, warm up IP.
  5. Test deliverability — check via mail-tester.com, adjust reputation.

Trigger Sequences — Here an External Platform Is Needed

The built-in mail module does not support triggers. For sequences, we connect external services.

Abandoned cart — classic. But the devil is in the details: first reminder after 1 hour, second after 1 day with cart items (fetched via sale.basket.get), third after 3 days with additional motivation. Three emails, no more — beyond that irritation begins.

Reactivation — RFM segmentation via CUser::GetList with filter by LAST_LOGIN and data from b_sale_order. Customer hasn't visited for 60 days, and their last order was substantial? This is not just "dormant" — it's specific lost revenue. Send a personalized offer.

Welcome sequence — 3-5 emails after subscription. First email immediately, second after 1 day. Beginner mistake: push a discount in the first email. No. First value, then offer.

Integration with Email Platforms

Service When to Choose Pitfalls
Unisender Small business, quick start API limits on free plan, slow sending with >50k base
Mindbox Large e-commerce, CDP needed Long deployment (2-3 months), expensive license, but segmentation is best in market
eSputnik Mid-sized e-commerce, omnichannel Good price/functionality balance, decent API
SendPulse Email + SMS + push in one Multichannel out of the box, but automation weaker than Mindbox
RetailRocket Product recommendations Focused on ML recommendations in emails, not a universal ESP

Integration is bidirectional: events from b_sale_order, b_iblock_element, b_user are sent to ESP, open and click statistics are returned. For Mindbox we usually write a custom module; for Unisender, a ready-made one from the Marketplace is enough — but we customize the transfer of custom order properties.

Database Segmentation for Bitrix24 Email Campaigns: Key Methods

RFM Analysis — the Workhorse

We build using three axes from b_sale_order data:

  • Recency — days since last order
  • Frequency — number of orders in a period
  • Monetary — total spend

We obtain segments: VIP loyal (R1F1M1), one-time high spend (R3F3M1), frequent low spend (R1F1M3). Each segment gets its own communication. VIPs get early access to sales. "One-time" get reactivation with a stronger offer.

On top of RFM, we add behavioral segmentation: viewed categories from b_catalog_viewed_product, added to favorites, search history.

Behavioral Segmentation — the Second Layer

We consider catalog data: which products the user viewed, added to cart, which pages they visited. This allows sending personalized recommendations in each email. For this, we use the Bitrix24 API for information blocks and events.

Deliverability — the Technical Part Everyone Forgets

You set up beautiful templates, wrote sequences — but emails go to spam. Because:

DNS records. SPF, DKIM, DMARC — the mandatory trio. Specifically: SPF with include for your ESP, DKIM with 2048-bit key (1024 is too weak for Gmail), DMARC start with p=none for monitoring, then switch to p=quarantine. Example SPF record:

v=spf1 include:_spf.google.com include:spf.sendpulse.com ~all

Don't forget to add the IP addresses of your Bitrix24 server if you send transactional emails directly. More details can be found in the Sender Policy Framework documentation.

IP warm-up. New dedicated IP for campaigns — do not send 100,000 emails at once. First week: 500/day, second: 2,000, third: 10,000. Otherwise, immediate ban from email providers. Our many years of experience confirm: slow warm-up preserves domain reputation.

List hygiene. Hard bounce — remove immediately, no discussion. Soft bounce — three attempts, then quarantine. Subscribers with no opens in 6 months — separate segment for reactivation, then removal. Dead addresses kill domain reputation faster than any spam content.

Analytics — What We Actually Look At

Not all metrics are equally useful. Here's what we look at first:

  • CTOR (click-to-open rate) — more important than just click rate. It shows content quality for those who opened.
  • Revenue per email — revenue per sent email. The only metric directly tied to money.
  • Spam complaint rate — keep below 0.1%. Above that, providers start cutting deliverability.
  • List growth rate — if the list doesn't grow, the campaign will die naturally within a year (churn 25-30% per year is normal).

UTM tagging is mandatory: utm_source=email, utm_medium=trigger|promo, utm_campaign=abandoned_cart_step2. Data flows into GA4 and Yandex.Metrica, closing on e-commerce transactions.

What Results Do Configured Bitrix24 Email Campaigns Bring?

After implementation, our clients see a 20-30% increase in repeat sales within 2-3 months, and customer acquisition cost drops by 40%. Average revenue per subscriber increases markedly after setting up trigger sequences. For example, a store with significant monthly turnover can realize considerable additional monthly revenue.

Typical Timelines

Task Timeline
Reworking transactional templates 1-2 weeks
Basic email strategy (5-7 triggers) 3-4 weeks
Complete CDP integration (Mindbox/eSputnik) 6-10 weeks
ESP integration via API 1-2 weeks
Responsive email template design (set of 8-12 emails) 1-2 weeks

We start with an audit: check current mail events, DNS records, deliverability via mail-tester.com, subscriber list quality. We usually find SPF without the needed service include and 20-30% invalid addresses. Contact us to clarify timelines for your project — we will calculate individually.

What You Get in the End

  • Audit of current Bitrix24 email campaign settings and report with recommendations
  • Reworked transactional templates with responsive layout and cross-sell blocks
  • Configured integration with external ESP (Unisender, eSputnik, Mindbox, or other)
  • Trigger sequences: abandoned cart, reactivation, welcome series
  • SPF/DKIM/DMARC configuration and IP warm-up (if needed)
  • Documentation of settings and training for the team on campaign management
  • Support during launch and first 2 weeks of deliverability monitoring

Order an audit of your current Bitrix24 email campaign settings — receive a personalized proposal and project cost estimate. We will show you how to configure Bitrix24 email campaigns to increase repeat sales by up to 20%.