Письма и почтовые события в 1С-Битрикс: что проверять
В 1С-Битрикс отправка письма часто проходит через почтовые события. Форма может успешно сохраниться, заявка появится в админке, но письмо менеджеру не придёт. Причина может быть в шаблоне события, настройках SMTP, адресе отправителя, очереди отправки, спам-фильтрах или обработчике формы.
Диагностику лучше вести по цепочке: событие создано, шаблон активен, письмо поставлено в очередь или отправлено, SMTP принял сообщение, получатель его увидел.
Проверить почтовое событие
Сначала нужно понять, какое событие должна создавать форма. В административной части проверяют типы почтовых событий и почтовые шаблоны. Если код вызывает CEvent::Send, в нём обычно видно EVENT_NAME.
CEvent::Send(
'FORM_FEEDBACK',
SITE_ID,
[
'NAME' => $name,
'PHONE' => $phone,
'EMAIL' => $email,
]
);
Если EVENT_NAME не совпадает с типом события в админке, шаблон не найдётся. Также нужно проверить SITE_ID: шаблон может быть привязан не к тому сайту.
Проверить шаблон письма
Почтовый шаблон должен быть активен. В нём должны быть корректные поля “Кому”, “От кого”, тема и тело письма. Частая ошибка — в шаблоне используются макросы, которые не передаются из формы.
#NAME#
#PHONE#
#EMAIL#
Если в коде передали USER_PHONE, а шаблон ждёт PHONE, в письме будет пусто. Само письмо при этом может отправиться.
Очередь почты
В Битрикс письма могут попадать в очередь. Если очередь не обрабатывается, письмо создано, но не отправлено. Нужно проверить настройки и работу агентов или cron, которые отвечают за отправку.
SELECT ID, EVENT_NAME, DATE_INSERT, SUCCESS_EXEC
FROM b_event
ORDER BY ID DESC;
Если SUCCESS_EXEC = N или записи копятся, нужно смотреть ошибку отправки и работу агентов.
SMTP
Если используется SMTP, нужно проверить host, port, encryption, логин и пароль. На некоторых проектах отправка через mail() работает нестабильно, поэтому SMTP обычно предпочтительнее.
Проверять подключение нужно с сервера сайта:
nc -vz smtp.example.ru 465
openssl s_client -connect smtp.example.ru:465
Для порта 587:
openssl s_client -starttls smtp -connect smtp.example.ru:587
From и Reply-To
Письмо не стоит отправлять от адреса пользователя, который он ввёл в форме. Лучше отправлять от доменного адреса, а email пользователя ставить в Reply-To. Иначе письмо может попасть в спам или быть отклонено.
CEvent::Send(
'FORM_FEEDBACK',
SITE_ID,
[
'EMAIL_FROM' => 'no-reply@example.ru',
'EMAIL_TO' => 'manager@example.ru',
'REPLY_TO' => $email,
]
);
Конкретные поля зависят от шаблона. Главное — чтобы From был доменным и совпадал с почтовыми настройками.
SPF, DKIM и DMARC
Если письмо технически отправлено, но попадает в спам, нужно проверить DNS домена. SPF должен разрешать выбранный SMTP-сервис, DKIM должен подписывать письма, DMARC задаёт политику обработки.
dig example.ru TXT
dig _dmarc.example.ru TXT
DKIM selector берётся из почтового сервиса. Его нельзя угадать по домену.
Форма и валидация
Иногда письмо не отправляется потому, что форма не проходит валидацию или обработчик даже не доходит до CEvent::Send. Нужно проверить отправку запроса в Network и добавить временное логирование.
\Bitrix\Main\Diag\Debug::writeToFile(
$_POST,
'feedback form',
'/local/logs/feedback.log'
);
На рабочем сайте не стоит логировать лишние персональные данные надолго. Такой лог нужен только для короткой диагностики.
Чек-лист диагностики
- Проверить, какой EVENT_NAME создаёт форма.
- Проверить активность почтового шаблона.
- Проверить SITE_ID шаблона.
- Сравнить макросы шаблона с полями, переданными из кода.
- Проверить b_event и SUCCESS_EXEC.
- Проверить работу агентов или cron отправки.
- Проверить SMTP с сервера сайта.
- Проверить From, Reply-To, SPF, DKIM и папку “Спам”.
Если письмо не пришло, не стоит сразу переписывать форму. В Битрикс много промежуточных точек, и обычно достаточно найти, где цепочка оборвалась: форма, событие, шаблон, очередь, SMTP или почтовый ящик получателя.
Комментарии (0)
Пока нет комментариев. Будьте первым!