Назад

Руководство по диагностике и решению проблем с почтой в Bitrix Framework

Главная
Блог
Руководство по диагностике и решению проблем с почтой в Bitrix Framework

Если ваш сайт на базе 1С-Битрикс перестал отправлять письма (например, заказы, регистрационные данные или уведомления), данное руководство поможет вам систематически выявить и устранить причину неполадки.

1. Быстрая проверка: работает ли базовая функция PHP mail()?

Первым делом необходимо исключить проблемы на уровне сервера.

  1. В административной панели Битрикс перейдите в раздел Настройки → Инструменты → Командная строка PHP.

  2. Скопируйте и вставьте следующий код, предварительно заменив mail_from@mail.com и mail_to@mail.com на реальные адреса:

    if( mail("mail_to@mail.com", "Тема письма", "Текст письма для проверки",
    "From: mail_from@mail.com
    Reply-To: mail_from@mail.com
    Content-Type: text/plain; charset=utf-8
    Content-Transfer-Encoding: 8bit"
    ) ){
        echo 'Успешно отправлено!';
    }else{
        echo 'Отправка не удалась!';
    }

  3. Нажмите кнопку «Выполнить».

Результаты:

  • «Отправка не удалась!» — Проблема на стороне хостинга. Функция mail() отключена или неправильно сконфигурирована. Необходимо обратиться в техническую поддержку вашего хостинг-провайдера.

  • «Успешно отправлено!» — Базовая функция почты работает. Проблема, скорее всего, в настройках или логике самого Битрикса. Переходите к следующему шагу.

Важно: Отправка писем в Битрикс является надстройкой над функцией mail() или пользовательской функцией custom_mail().

2. Проверка почтовых событий и шаблонов в Bitrix

Битрикс отправляет письма через систему событий, используя методы CEvent::Send() (отложенная отправка) и CEvent::SendImmediate() (мгновенная отправка). Письма, отправленные через CEvent::Send, помещаются в таблицу b_event для дальнейшей обработки агентами или Cron.

Как проверить таблицу b_event:

  1. Перейдите в Настройки → Инструменты → SQL-запрос.

  2. Выполните запрос:

    SELECT * FROM b_event ORDER BY id DESC LIMIT 10;

  3. Обратите внимание на ключевые столбцы:

    • SUCCESS_EXEC — Статус отправки.

    • DUPLICATE — Флаг отправки скрытой копии (BCC).

Расшифровка статусов SUCCESS_EXEC:

  • Y — Письмо успешно отправлено.

  • N — Письмо еще не было обработано (ожидает в очереди).

  • F — Произошла ошибка при отправке.

  • P — Часть писем отправлена, часть — нет.

  • 0 — Почтовый шаблон для данного события не найден.

3. Диагностика по статусам в b_event

Если статус N (письма в очереди)

Письма находятся в очереди и не обрабатываются.

  1. Проверьте режим отправки. В файле /bitrix/php_interface/dbconn.php убедитесь, что нет определения констант BX_CRONTAB и BX_CRONTAB_SUPPORT со значением true. Если они есть — закомментируйте их (предварительно сделав резервную копию файла).

  2. Запустите обработку вручную. Выполните в командной строке PHP или через Cron команду: CEvent::CheckEvents();.

  3. Очистите кеш. Удалите содержимое папки /bitrix/managed_cache/ через административный раздел (Настройки → Настройки продукта → Автокеширование → Очистка кеша).

Если статус F (ошибка отправки)

Битрикс сформировал письмо, но почтовый сервер его не принял.

  1. Проверьте почтовый шаблон:

    • Убедитесь, что все обязательные поля (например, #EMAIL#) заполнены и не содержат опечаток.

    • Убедитесь, что шаблон активен и привязан к правильному сайту (LID).

  2. Упростите письмо. Попробуйте временно убрать получателей в копии (BCC), отключить дублирование, включить опцию «Конвертировать 8-битные заголовки» в настройках модуля почты.

  3. Проверьте логи почтового сервера. В стандартной среде Битрикс лог может находиться по пути /home/bitrix/msmtp_default.log. Также проверьте права на файл конфигурации /home/bitrix/.msmtprc.

  4. Лимиты хостинга. Если вы отправляете много писем, возможно, вы превысили суточный или часовой лимит, установленный хостинг-провайдером.

Если статус 0 (шаблон не найден)

Битрикс не смог найти активный почтовый шаблон для указанного события.

  1. Проверьте, существует ли почтовое событие с нужным именем (EVENT_NAME).

  2. Убедитесь, что почтовый шаблон для этого события активен и привязан к нужному сайту.

4. Проверка пользовательской почтовой функции (SMTP)

Если вы используете SMTP через custom_mail (например, на базе PHPMailer), стандартная функция mail() не используется.

  1. Найдите в коде сайта (часто в init.php) объявление функции custom_mail.

  2. Временно включите debug-режим в вашем SMTP-клиенте, чтобы получить подробное описание ошибки. Пример для PHPMailer:

    $mail->SMTPDebug = 2; // Вывод детального лога
    $mail->Debugoutput = function($str, $level) {
        file_put_contents('/path/to/debug.log', "$level: $str\n", FILE_APPEND);
    };

  3. Проверьте логи на наличие ошибок аутентификации, подключения или отправки.

5. Дополнительные важные проверки

  • Доменное имя сайта. В административном разделе (Настройки → Настройки продукта → Сайты) убедитесь, что у вашего сайта корректно указано «Доменное имя». Письма часто не отправляются, если это поле пустое или содержит ошибку.

  • Спам-фильтры. Всегда проверяйте папку «Спам» на тестовом почтовом ящике. Письмо могло быть успешно отправлено, но попасть в спам из-за содержимого или настроек SPF/DKIM записей вашего домена.

Заключение

Диагностика почты в Bitrix требует последовательного подхода. Начните с проверки базовой функции mail(), затем исследуйте очередь писем и почтовые шаблоны внутри системы. Если проблема не решена, изучите логи и проверьте конфигурацию SMTP. В большинстве случаев этот метод позволяет точно определить и устранить причину неисправности.

Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Читайте по теме
Все статьи
Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Все статьи