Битрикс не отправляет письма - с этой формулировкой ко мне обычно приходят через форму на сайте: письмо с заказом не дошло до менеджера, клиент не получил подтверждение оплаты, админ не увидел уведомление о новой заявке из CRM-формы. Причины разные - от сломанного SMTP до зависшей очереди почтовых событий, но диагностика в большинстве случаев укладывается в один и тот же порядок действий, который я опишу ниже на реальных кейсах с рабочих проектов.
Как понять, что письма не отправляются, а не просто не приходят
Первым делом разделяю две разные проблемы, потому что чинятся они по-разному. В первом случае Битрикс физически не пытается отправить письмо: событие зависло в очереди, SMTP не настроен или сломался модуль main после обновления. Во втором письмо ушло с сервера, но получатель его не увидел - попало в спам, отклонено принимающим сервером или клиент указал несуществующий адрес при оформлении заказа.
Проверяю в таком порядке:
- Настройки → Настройки продукта → Почта → пункт «Проверка отправки почты» - отправляю тестовое письмо на свой ящик и смотрю, что возвращает сервер: если SMTP отвечает ошибкой, код и текст видны сразу в админке, без копания в логах.
- Журнал событий (Настройки → Инструменты → Журнал событий или прямой путь /bitrix/admin/event_log.php) - фильтрую по модулю main, там видны ошибки агентов и попытки отправки за последние сутки.
- Таблица
b_eventв базе - если там копятся записи сSUCCESS_EXECUTE = 'N', письма формируются, но физически не уходят с сервера.
Быстрая проверка очереди через SQL:
SELECT ID, EVENT_NAME, DATE_INSERT, SUCCESS_EXECUTE
FROM b_event
WHERE SUCCESS_EXECUTE = 'N'
ORDER BY DATE_INSERT DESC
LIMIT 20;
Если записей с N десятки и они не уменьшаются в течение часа, дело не в разовом сбое, а в остановленной обработке очереди - переходим к следующему пункту.
Проверка очереди сообщений и почтовых агентов
За отправку писем из очереди в Битриксе отвечают агенты - фоновые задачи, которые модуль main запускает по расписанию через CEvent::Send. Если хостинг не настроил cron на реальный запуск агентов, а рассчитывает только на «тиканье» при заходе посетителя на сайт (агенты по умолчанию могут дергаться от хитов), при низкой посещаемости письма будут копиться часами.
Проверяю, есть ли в crontab строка, которая реально дергает обработку агентов:
*/5 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_cli.php /home/bitrix/www/bitrix/modules/main/cron_events.php >> /home/bitrix/logs/cron_events.log 2>&1
Если строки нет - добавляю через панель хостинга или crontab ‑e, и почти всегда после этого очередь начинает разгребаться в течение первых пяти минут. Для интернет-магазинов, где письма - это подтверждение заказа и трек-номер от СДЭК, задержка в пару часов означает поток звонков «а где моя посылка», хотя посылка уже едет.
Если нужно не проверять руками каждый день, а получать уведомление при первом же сбое, у меня в библиотеке готовых скриптов есть шаблон, который раз в 15 минут дергает таблицу b_event и шлёт алерт в Telegram, если необработанных писем больше десяти или очередь стоит дольше часа.
Бесплатный материал
🎁 Полезный скрипт в подарок
Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.
Без спама. Отписка в 1 клик.
Настройка SMTP в Битриксе вместо стандартного sendmail
По умолчанию Битрикс отправляет письма через mail() в PHP, а тот дергает локальный sendmail на сервере. Схема рабочая, пока хостинг не режет исходящий порт 25 (а многие провайдеры вроде reg.ru или Timeweb режут его на массовых тарифах, чтобы сервер не попал в списки спамеров) или пока принимающий сервер не начинает подозрительно смотреть на письма, у которых обратный DNS сервера не совпадает с доменом отправителя.
Переход на SMTP через корпоративную почту (Яндекс 360 для бизнеса, Mail.ru для бизнеса или свой почтовый сервер) снимает большинство таких проблем, потому что письмо уходит через сервер, у которого уже настроена репутация и SPF.
| Параметр | sendmail (по умолчанию) | SMTP через почтовый сервис |
|---|---|---|
| Настройка | не требуется | нужны логин, пароль, порт, шифрование |
| Репутация IP | зависит от сервера хостинга, часто общая с чужими сайтами | репутация почтового провайдера |
| Попадание в спам | чаще, особенно на Gmail и Mail.ru | реже при настроенных SPF/DKIM |
| Диагностика ошибок | только через логи сервера | код ошибки виден сразу от SMTP-сервера |
| Лимиты на отправку | обычно без явного лимита, но риск блокировки IP хостинга | лимит провайдера (у Яндекса - сотни писем в сутки на бесплатном тарифе) |
Включить SMTP можно через админку (Настройки → Настройки продукта → Почта → Настройки SMTP), а для тиражирования на несколько инсталляций или для деплоя через CLI я обычно прописываю это кодом:
<?php
COption::SetOptionString("main", "mail_smtp_active", "Y");
COption::SetOptionString("main", "mail_smtp_server", "smtp.yandex.ru");
COption::SetOptionString("main", "mail_smtp_port", "465");
COption::SetOptionString("main", "mail_smtp_login", "no-reply@example.ru");
COption::SetOptionString("main", "mail_smtp_password", "пароль-приложения");
COption::SetOptionString("main", "mail_smtp_protocol", "ssl");
Важный момент - пароль от приложения, а не от самого ящика: и Яндекс, и Mail.ru давно требуют отдельный пароль для внешних SMTP-клиентов, обычный логин-пароль от веб-морды почты SMTP-сервер отклонит с ошибкой авторизации.
Зависшая очередь: что чинить руками
Если агенты настроены и SMTP отвечает без ошибок, а письма всё равно копятся, смотрю по списку:
- Место на диске - если диск забит логами или бэкапами, модуль main перестаёт писать в очередь и агенты падают с ошибкой без внятного сообщения в интерфейсе.
max_execution_timeв PHP - на слабых тарифах хостинга скрипт агента может не успевать разобрать всю очередь за отведённое время и обрывается на середине.- Блокировку исходящего порта фаерволом - проверяю телнетом или через
nc -zv smtp.yandex.ru 465с самого сервера, а не с локальной машины, потому что блокировка обычно именно на стороне хостинга. - Версию модуля main - после обновления Битрикса иногда меняется формат обработки очереди, и старые зависшие записи с прежней структурой агент просто игнорирует.
На одном интернет-магазине причина была банальной: диск заполнился логами ошибок 404 от старых ссылок конкурентов, которые боты долбили по несуществующим URL, и очередь почты встала на трое суток, пока никто не смотрел на свободное место. После очистки логов и настройки ротации всё разгребло само за несколько минут.
SPF, DKIM и DMARC: чтобы письма не улетали в спам
Отдельная категория жалоб - «письма уходят, но клиент их не видит». Здесь Битрикс уже ни при чём, дело в DNS-записях домена, с которого идёт отправка.
- SPF - запись в DNS, которая перечисляет серверы, имеющие право слать почту от имени домена. Без неё принимающий сервер видит письмо с незнакомого IP и понижает доверие.
- DKIM - цифровая подпись письма, подтверждающая, что оно не подделано по дороге. Настраивается на стороне почтового провайдера, публичный ключ публикуется в DNS отдельной TXT-записью.
- DMARC - политика, которая говорит принимающим серверам, что делать с письмом, если SPF или DKIM не сошлись: пропустить, отправить в спам или отклонить.
Проверяю итоговую настройку через mail-tester.com - отправляю тестовое письмо на выданный адрес и смотрю оценку. Ниже 7 из 10 почти всегда означает, что письма массово будут падать в спам на Gmail и Mail.ru, даже если формально Битрикс отчитывается об успешной отправке.
Ещё момент, который часто упускают при переезде на новый сервер: свежий IP-адрес без истории отправки первые одну-две недели тоже режется спам-фильтрами, даже с идеальными SPF/DKIM/DMARC. Это называется прогревом IP, и объём отправки в этот период стоит наращивать постепенно, а не выгружать сразу всю базу подписчиков.
Если настройка SMTP и DNS-записей кажется избыточной для разовой задачи, беру такие разборы отдельной консультацией от 3 000 ₽ - обычно хватает часа, чтобы найти причину и дать конкретный план исправления.
Частые ошибки при отправке почты в Битриксе
| Ошибка | Вероятная причина | Что делаю |
|---|---|---|
| Connection refused / Connection timed out | хостинг блокирует исходящий порт 25/465/587 | перехожу на SMTP-порт, разрешённый провайдером, или пишу в поддержку хостинга с просьбой открыть порт |
| Relay access denied | неверный логин или пароль SMTP, либо домен не привязан к аккаунту почты | перепроверяю пароль приложения и привязку домена в панели почтового сервиса |
| 550 5.7.1 Recipient address rejected | принимающий сервер не доверяет отправителю из-за отсутствующего SPF/DKIM | добавляю недостающие DNS-записи и проверяю через mail-tester |
| SSL certificate problem | несовпадение порта и типа шифрования (SSL вместо TLS или наоборот) | меняю протокол в настройках SMTP на соответствующий порту |
| Письма уходят, но не приходят никому | очередь агентов не обрабатывается из-за отсутствия cron | настраиваю crontab на реальный запуск cron_events.php |
Чтобы сайт работал без сбоев
Техподдержка
от 15 000 ₽/мес
Подробнее →Частые вопросы
Почему письма из Битрикса не приходят только клиентам на Gmail или Mail.ru, а на других почтовиках всё нормально?
Это почти всегда признак проблем с SPF, DKIM или репутацией IP - крупные почтовые сервисы жёстче фильтруют незнакомых отправителей, чем мелкие корпоративные ящики. Проверяю через mail-tester.com и смотрю, какая именно проверка не проходит.
Можно ли проверить отправку письма, не дожидаясь реального клиента и заказа?
Да, в Настройки → Настройки продукта → Почта есть пункт «Проверка отправки почты» - отправляет тестовое письмо на указанный адрес и сразу показывает код ответа SMTP-сервера, если что-то пошло не так.
Обязательно ли переходить на SMTP, если хостинг и так настроил sendmail и раньше всё работало?
Если письма стабильно доходят и не попадают в спам - трогать не нужно. Переход на SMTP чаще всего требуется после смены хостинга, роста объёма рассылок или когда часть писем начинает теряться без видимой причины.
Что делать, если письма стали массово попадать в спам сразу после переезда на новый сервер?
Скорее всего, дело в свежем IP без истории отправки - новым адресам нужен прогрев в течение одной-двух недель с постепенным ростом объёма писем, даже при корректно настроенных SPF, DKIM и DMARC.