Работа с почтой

Bitrix Framework обрабатывает входящие и исходящие письма отдельно.

  1. Входящие — через модуль Почта. Он подключает ящики, забирает письма с сервера и применяет правила обработки.

  2. Исходящие — через почтовые события. Они срабатывают на действия пользователя и отправляют письма по заданным шаблонам.

Быстрый переход:

Модуль Почта

Модуль Почта получает входящие письма и обрабатывает их по правилам. Он позволяет:

  • хранить письма в одном месте,

  • создавать любое количество почтовых ящиков,

  • применять автоматически или вручную правила к письмам,

  • обучать систему фильтровать спам,

  • получать письма без их удаления на сервере.

Настройки модуля

Чтобы работать с почтой, настройте параметры модуля.

  1. Откройте страницу Настройки > Настройки продукта > Настройки модулей > Почта.

  2. На вкладке Настройки задайте параметры обработки и хранения писем.

    • Встраивать локальный идентификатор в заголовок исходящего письма — добавляет уникальный ID в заголовок письма. Модуль привязывает ответ на письмо к исходному сообщению.

    • Сохранять исходный текст письма — сохраняет письмо в базе данных.

    • Сохранять вложенные файлы — разрешает или запрещает сохранять вложения в папке /upload/mail/attachment/.

    • Таймаут соединения — максимальное время, в течение которого система ждет ответ от почтового сервера.

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

    • Хранить журнал работы (дней) — срок хранения записей в журнале работы модуля.

    • Срок хранения писем в днях — автоматически удаляет письма старше указанного срока. Значение 0 отключает удаление.

  3. На вкладке SMTP-сервер укажите команду для запуска встроенного почтового сервера.

    • Командная строка запуска PHP — полная команда, которая запускает PHP-скрипт SMTP-сервера. Поле обязательно, если сайт работает не на VMBitrix.

    • Состояние — текущее состояние SMTP-сервера.

  4. Для SMTP-сервера учтите системные ограничения.

    • Убедитесь, что порт не занят другими службами.

    • В Linux только пользователь root может использовать порты 1–1024. Чтобы обойти ограничение, используйте authbind или настройте переадресацию на фаерволе.

    • Откройте порт в файерволе для внешних подключений.

    • В настройках почтового ящика домены должны иметь DNS-запись MX или A, которые ведут на IP-адрес SMTP-сервера. Если SMTP работает на том же IP-адресе, что и сайт, дополнительных настроек не требуется.

  5. На вкладке Доступ выберите группы пользователей, которым разрешен доступ к инструментам модуля.

Почтовые ящики

Существует два типа почтовых ящиков.

  • Системный — предназначен для служебных задач.

  • Пользовательский — создается пользователем на сайте или администратором в административном разделе.

Как добавить почтовый ящик

В Bitrix Framework можно создавать любое количество почтовых ящиков.

  1. Откройте страницу Сервисы > Почта > Почтовые ящики.

  2. Нажмите Добавить и выберите тип ящика.

  3. Заполните форму редактирования.

Cистемный ящик

Создайте системный ящик, чтобы принимать обращения в техподдержку, публиковать сообщения на форумах, обрабатывать письма в CRM.

На вкладке Почтовый ящик укажите настройки подключения.

  • Название — введите название, которое поясняет предназначение ящика.

  • Тип — выберите тип сервера:

    • Внешний POP3-сервер — для подключения к внешнему почтовому серверу,

    • Внутренний SMTP-сервер — для приема писем напрямую на сервер сайта.

      Для внутреннего SMTP-сервера обязательно укажите Доменные имена, обслуживаемые сервером. Если не ограничить список доменов, сервер будет принимать письма с любых адресов. Почтовые сервисы и организации занесут IP-адрес сервера в публичные спам-листы.

  • Почтовый сервер (POP3) / порт — задайте адрес и порт сервера,

  • Имя входа и пароль — введите учетные данные для доступа к ящику,

  • Проверять с периодом — укажите интервал автоматической проверки новых писем. Для ручной проверки оставьте поле пустым или укажите 0.

Чтобы добавить правила обработки писем, в секции Добавить ящик и перейти к созданию правила укажите тип правила и нажмите Добавить. Подробнее читайте в разделе Правила обработки.

На вкладке Дополнительные настройки укажите параметры получения сообщений.

Пользовательский ящик

Чтобы подключить к сайту личный ящик сотрудника, добавьте пользовательский ящик и укажите параметры подключения.

  • Почтовый сервис — выберите один из сервисов, который добавлен в разделе Сервисы > Почта > Почтовые сервисы. Подробнее читайте в подразделе Почтовые сервисы.

  • Название — укажите понятное название ящика.

  • Почтовый сервер (IMAP) / порт — задайте адрес сервера и порт. Для IMAP с SSL используйте порт 993.

  • Имя входа и пароль — введите учетные данные для доступа к ящику.

  • Владелец — выберите пользователя сайта, к которому нужно привязать ящик.

Правила обработки

Правила обработки помогают отметить письмо как прочитанное, определить спам, удалить ненужные письма. Существует четыре типа правил.

  • Ручная настройка — общие настройки для обработки писем.

  • Добавление сообщений в форумы соцсети — шаблон для писем на форумы.

  • Добавление сообщения в техподдержку — шаблон для обращений в поддержку.

  • Добавление события в CRM — шаблон для привязки письма к сущности CRM.

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

Как добавить правило

  1. Откройте страницу Сервисы > Почта > Правила.

  2. Нажмите Добавить правило и выберите тип.

  3. Заполните поля на вкладке Параметры.

    • Почтовый ящик — укажите ящик, для которого работает правило.

    • Название — введите название правила.

    • Применять при событиях — выберите, когда срабатывает правило: автоматически при получении почты или вручную при принудительном вызове.

  4. На второй вкладке задайте условия, при которых сработает правило. Укажите значения в текстовых полях. Если стандартных условий недостаточно, составьте условие на PHP-скрипте.

    Пример: правило сработает, если приоритет письма выше 3 или отправитель использует адрес с доменом @bitrix.

    if ($arMessageFields["FIELD_PRIORITY"] > 3 || strpos($arMessageFields["FIELD_FROM"], "@bitrix") > 0)
                return true;
            return false;
            

    Если правило создано по шаблонам для форума, техподдержки или CRM, настройте параметры в дополнительных секциях.

  5. На третьей вкладке настройте действия. Система применит их к письмам, которые соответствуют условиям правила.

    • Установить статус прочтенности — отметит письмо как прочитанное.

    • Установить пометку спам — пометит письмо как спам-рассылку.

    • Действие на PHP скрипте — запустит скрипт при обработке письма.

    • Удалить сообщение — удалит письмо.

    • Не обрабатывать другими правилами — закончит обработку письма и не применит другие правила.

Как работать с письмами

Список писем хранится на странице Сервисы > Почта > Письма. Иконки рядом с письмами показывают их статус.

Получить почту вручную

В поле Получить почту выберите ящик и нажмите OK. Система покажет отчет о доставке почты.

Просмотреть письмо

Чтобы прочитать письмо, перейдите по ссылке с его темой. Форма просмотра позволяет:

  • обучить систему фильтровать спам,

  • применить к письму ручные правила,

  • пометить письмо на удаление.

Как отслеживать работу модуля

Журнал обработки почты расположен на странице Сервисы > Почта > Журнал работы. Он помечает события разными цветами:

  • зеленый — запросы к почтовому серверу,

  • синий — ответы сервера,

  • красный — ошибки,

  • черный — применение правил и действий.

Почтовые сервисы

Почтовые сервисы — это внешние провайдеры, через которых пользователи подключают ящики в системе. Администратор управляет списком на странице Сервисы > Почта > Почтовые сервисы.

Пользователи могут подключать ящики только через почтовые сервисы из этого списка.

Чтобы добавить сервис, нажмите Добавить и укажите параметры подключения сервера.

  • Тип — выберите тип почтового сервера: imap или domain.

  • Почтовый сервер (IMAP) / порт — укажите адрес сервера и порт.

  • Адрес веб-интерфейса — укажите адрес сервиса.

Если тип сервера — domain, заполните поля Доменное имя и Токен. В них нужно внести данные, которые получены от доменного регистратора.

Как отправлять письма

Модуль Почта не отправляет письма. Отправка исходящих сообщений происходит через механизм почтовых событий.

Чтобы отправлять письма, необходимо выполнить три этапа настроек.

  1. Настроить окружение PHP для отправки.

  2. Создать тип события.

  3. Создать почтовый шаблон.

Настройка окружения

Сообщения можно отправлять через один из трех вариантов.

  • Локальный агент sendmail или postfix для сайта на Linux.

  • Внешний SMTP-сервер без авторизации для сайта на Windows.

  • Внешний SMTP-сервер с авторизацией, если стандартная отправка недоступна.

На Windows укажите SMTP-сервер в файле php.ini. На сервере, например, MS Exchange, разрешите прием сообщений с IP-адреса сайта без авторизации

На Linux настройте полноценный почтовый сервер или msmtp, который входит в состав VMBitrix.

Настройка на Linux

Пример составлен для CentOS 5.

  1. Удалите sendmail.

    rpm -e —nodeps sendmail
            
  2. Установите postfix.

    yum install postfix
            /etc/postfix/post-install upgrade-package
            
  3. Пересоздайте базу алиасов.

    cd /etc
            newaliases
            
  4. В файле /etc/php.ini измените значение sendmail_path.

    sendmail_path = /usr/sbin/sendmail -t -i
            
  5. Перезапустите postfix и Apache.

    service postfix restart
            service zend-server restart
            
  6. Проверьте postfix в автозагрузке.

    chkconfig —list | grep postfix
            

    По умолчанию он есть:

    postfix         0:off   1:off   2:on    3:on    4:on    5:on    6:off
            

    Если postfix не включен, выполните команду:

    chkconfig postfix on
            
  7. Проверьте работу.

    <?
            if (mail("moe_mylo@mail.ru", "test subject", "test body", "From: otpravitel@bitrix.ru"))
                echo "Сообщение передано функции mail, проверьте почту в ящике.";
            else
                echo "Функция mail не работает, свяжитесь с администрацией хостинга.";
            ?>
            

Настройка на VMBitrix

  1. Запустите виртуальную машину.

  2. Войдите в VMBitrix под пользователем root.

  3. В главном меню перейдите 8. Configure pool sites > 4. Change a site's e-mail settings.

  4. Введите имя хоста, для которого нужно настроить отправку почты.

  5. Укажите параметры.

    • from address — адрес отправителя, от которого выполняется пересылка писем.

    • server address or DNS — IP- или DNS-адрес SMTP-сервера. По умолчанию — 127.0.0.1.

    • server port — порт сервера. Используйте 25 для обычного соединения или 465 для SSL.

    • SMTP authentication — укажите y, если требуется авторизация. Для большинства почтовых сервисов авторизация обязательна. Если авторизация не нужна, введите n.

      Если ввели y, задайте логин, пароль и метод авторизации: auto, plain, login и другие.

    • TLS enabled — укажите y, если сервер поддерживает TLS. В противном случае введите n.

  6. Дождитесь завершения настройки.

Задачи настройки могут выполняться долго — до нескольких часов. Текущие задачи отображаются в меню 5. Background tasks > 1. View running tasks. Логи можно посмотреть в каталоге /opt/webdir/temp.

Почтовые сервисы, например, Яндекс, Mail.ru, не позволяют подменять адрес в поле From при отправке письма через их SMTP. Адрес должен совпадать с учетной записью. Указать несколько отправителей нельзя.

Решение проблем

На странице Настройки > Инструменты > Проверка сайта может отображаться ошибка Есть ошибки при отправке системных почтовых сообщений. Возможная причина — включена отправка через cron.

Решение: отключите cron в файле /bitrix/php_interface/dbconn.php.

define("BX_CRONTAB_SUPPORT", false);
        

Типы событий

Тип определяет, какой шаблон письма использовать при событии в системе. Например, регистрируется пользователь — сайт вызывает событие USER_REGISTER. Администратор создает шаблон для этого типа, и новичок получает приветственное письмо.

События нужны, чтобы отправлять уведомления без изменения кода ядра. Например, обнаружен вирус, запрошен код авторизации, изменился статус заказа.

Как создать тип события

  1. Откройте страницу Настройки > Настройки продукта > Почтовые и СМС события > Типы событий.

  2. Нажмите Добавить тип.

  3. Заполните параметры:

    • Тип события — укажите латинскими буквами кодовое название события. Можно начать с кода модуля, например, SALE_MY_STATUS_CHANGE.

    • Вид события — выберите Почтовое событие.

  4. Отметьте язык системы и укажите:

    • Название — задайте название типа.

    • Описание — введите макросы полей #SOMETHING#, которые можно использовать в почтовом шаблоне.

Тип события настроен. Теперь можно добавить почтовый шаблон.

Тип события не работает самостоятельно. Разработчик добавляет вызов события с помощью CEvent::Send в нужный участок кода. Подробности читайте в подразделе Вызвать почтовое событие.

Почтовые шаблоны

Почтовые шаблоны управляют внешним видом исходящих писем. Их настраивают на странице Настройки > Настройки продукта > Почтовые и СМС события > Почтовые шаблоны.

Как настроить шаблон

  1. Нажмите Добавить шаблон для нового шаблона или Изменить, чтобы отредактировать существующий шаблон.

  2. Настройте параметры шаблона.

    • Тип почтового события — выберите тип события, при котором система отправит письмо. Параметр можно настроить только при создании шаблона.

    • Активен — отметьте опцию. Только активные шаблоны можно использовать для генерации писем.

    • Сайт — укажите сайт, к которому привязан шаблон.

    • Язык — задайте язык события или оставьте значение (не установлен). При создании письма система выбирает почтовые шаблоны, которые соответствуют языку события или не имеют установленного языка. При многосайтовости язык сайта и язык шаблона должны совпадать.

  3. В блоке Поля письма задайте отправителя, получателей и тему письма. Чтобы увидеть все поля, нажмите «показать дополнительные заголовки...». При заполнении можно использовать макросы.

    • От кого — заполните адрес отправителя. Можно указать любой адрес. Для интернет-магазина по умолчанию используется #SALE_EMAIL# — email отдела продаж.

    • Кому — укажите получателей письма. Адреса указываются через запятую.

    Если поля От кого и Кому не заполнены, система подставит адрес из настроек сайта. Если в настройках сайта адреса нет — из настроек Главного модуля. Адрес используется в обоих полях.

    • Скрытая копия — укажите адреса, которые не видны другим получателям. Получатели из этого поля не видят друг друга.

    • Важность — выберите уровень важности: высокая, нормальная или низкая.

    • Тема — укажите тему письма.

  4. В блоке Сообщение напишите текст письма в одном из форматов: Текст, HTML или Визуальный редактор.

    В сообщение можно вставлять макросы и PHP-код:

    Добрый день!
            Ваш логин: #LOGIN#
            Текущая дата: <?= date('d.m.Y') ?>
            

    В параметре Тема оформления можно выбрать вариант оформления письма. Подробнее о темах читайте в подразделе Темы оформления.

Макросы

Внизу формы редактирования шаблона перечислены макросы, которые в нем доступны. Их можно вставлять в любое поле.

Если в описании макроса указано «устанавливается в настройках», речь идет о настройках Главного модуля.

В почтовых шаблонах можно использовать системные макросы и макросы из описания типа события.

Системные макросы — это значения, которые заданы в настройках Главного модуля:

  • #DEFAULT_EMAIL_FROM# — email администратора сайта, отправитель по умолчанию,

  • #DEFAULT_SENDER# — номер отправителя по умолчанию,

  • #SITE_NAME# — название сайта,

  • #SERVER_NAME# — URL сайта.

Системные макросы подставляются автоматически при вызове события. Если разработчик передаст другое значение, оно заменит системное.

Макросы описания типа можно взять из массива метода CEventType::Add. Например, для массива

array(
            'ORDER_ID' => 123,
            'ORDER_PAID' => 'Y',
            'BUYER_NAME' => 'Андрей'
        )
        

в шаблоне можно использовать:

  • макросы #ORDER_ID#, #ORDER_PAID#, #BUYER_NAME#,

  • параметры через переменную $arParams.

    <?=$arParams['ORDER_ID']?>
            <?=$arParams['ORDER_PAID']?>
            <?=$arParams['BUYER_NAME']?>
            

Компоненты

В тело письма можно вставлять компоненты. Они позволяют добавить динамические данные, например, список товаров или информацию по заказу.

  1. Включите формат сообщения — Визуальный редактор.

  2. Перетащите компонент из списка в рабочую область.

  3. В теле письма нажмите на компонент дважды.

  4. Настройте параметры компонента.

При размещении компонентов в шаблонах учитывайте технические особенности.

  • Компоненты подключают с помощью метода EventMessageThemeCompiler::includeComponent(), а не CMain::IncludeComponent(). Аргументы методов одинаковые.

  • В редакторе отображаются компоненты, у которых в файле .description.php указан тип "TYPE" => "mail".

    <?php
            if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
                die();
            }
            
            $arComponentDescription = [
                'NAME' => GetMessage('SBBS_DEFAULT_TEMPLATE_NAME'),
                'TYPE' => 'mail',
                'DESCRIPTION' => GetMessage('SBBS_DEFAULT_TEMPLATE_DESCRIPTION'),
                'ICON' => '/images/sale_basket.gif',
                'PATH' => [
                    'ID' => 'e-store',
                    'CHILD' => [
                        'ID' => 'sale_basket',
                        'NAME' => GetMessage('SBBS_NAME'),
                    ],
                ],
            ];
            ?>
            
  • Компонент не должен использовать:

    • Глобальный объект USER. Он содержит данные о посетителе, а не о получателе письма.

    • Константы SITE_ID, LANGUAGE_ID, SITE_TEMPLATE_ID. Вместо них используйте $this→getSiteId(), $this→getLanguageId(), $this→getSiteTemplateId().

При генерации письма по шаблону Bitrix Framework выполняет код компонентов и использует:

  • язык интерфейса и языковые файлы из настроек сайта, к которому привязано событие,

  • кодировку письма — из настроек сайта.

В многосайтовой системе с разными языками письмо можно прийти на другом языке. Чтобы избежать ошибки, передавайте в CEvent::Send() правильный SITE_ID.

Как протестировать шаблон

  1. Откройте форму почтового шаблона.

  2. В поле Кому укажите собственный email.

  3. Отправьте письмо и проверьте внешний вид.

  4. Если все правильно, заполните поля нужными адресами.

Темы оформления

Тема оформления — это шаблон внешнего вида письма. Он определяет расположение элементов письма, художественный стиль и способ отображения текста сообщения. Тема включает в себя программный HTML-код, таблицы стилей и дополнительные файлы.

Чтобы создать тему, откройте страницу Настройки > Почтовые и СМС события > Темы оформления и нажмите Добавить тему. Заполните поля формы.

  • ID — задайте уникальный идентификатор латинскими буквами. Обязательное поле.

  • Название — введите название темы оформления.

  • Тип — укажите Шаблон для почтовых писем.

Дальнейшие шаги повторяют создание шаблона сайта. Технически тема оформления — это обычный шаблон сайта в папке /bitrix/templates/, но с типом mail. В файле .description.php должно быть:

<?php
        $arTemplate = [
            'NAME'        => 'Тестовая тема оформления',
            'DESCRIPTION' => 'Тестовая тема оформления',
            'SORT'        => '',
            'TYPE'        => 'mail',
        ];
        ?>
        

Подробнее о шаблонах читайте в статье Шаблоны сайтов.

Стили из CSS-файлов подставляются в HTML-код письма в том месте, где вызвано:

<?= $this->showStyles() ?>
        

Тема оформления, как и шаблон сайта, может содержать PHP-код.

<div style="padding: 41px 0 24px;max-width: 732px;margin: 0 auto;"><?
            $str24 = '<span style="color: #c2d1d6;">24</span>';
            
            $companyName = (
                IsModuleInstalled('bitrix24')
                    ? COption::getOptionString('bitrix24', 'site_title', '')
                    : COption::getOptionString('main', 'site_name', '')
            );
            
            if (empty($companyName))
            {
                $companyName = $arParams["SITE_NAME"];
            }
            
            $companyName .= (
                IsModuleInstalled('bitrix24')
                    ? (COption::GetOptionString("bitrix24", "logo24show", "Y") == "Y" ? $str24 : '')
                    : $str24
            );
            
            ?><h1 style="color: #ffffff;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size: 35px;font-weight: bold;margin: 0;padding: 0;"><?=$companyName?></h1>
        </div>
        

API почтовой системы

Работу по отправке писем можно выполнять через API, без участия административной части.

Создать тип события

Чтобы зарегистрировать тип события, используйте метод CEventType::Add(). Он возвращает ID нового типа или false при ошибке. Текст ошибки сохраняется в $APPLICATION->LAST_ERROR. В метод передайте параметры:

  • LID — идентификатор языка интерфейса,

  • EVENT_NAME — уникальный код типа,

  • EVENT_TYPE — вид события, для почтовых событий принимает значение email,

  • NAME — название типа события,

  • DESCRIPTION — список макросов с пояснениями.

<?php
        $et = new CEventType();
        $et->Add([
            'EVENT_NAME'  => 'ADV_BANNER_STATUS_CHANGE',
            'NAME'        => 'Изменился статус баннера',
            'LID'         => 'ru',
            'DESCRIPTION' => "
                #ID# - ID баннера
                #CONTRACT_ID# - ID контракта
                #TYPE_SID# - ID типа
                #EMAIL_TO# - email получателя
                #STATUS# - текущий статус
            ",
        ]);
        ?>
        

Создать почтовый шаблон

Шаблон привязан к типу события по EVENT_NAME. Чтобы его добавить, используйте метод CEventMessage::Add(). Он возвращает ID шаблона или false при ошибке. Текст ошибки сохраняется в свойстве LAST_ERROR объекта.

Основные поля:

  • EVENT_NAME — код типа,

  • LID — массив идентификаторов сайтов,

  • EMAIL_FROM, EMAIL_TO, BCC — адреса, могут содержать макросы,

  • SUBJECT — тема письма,

  • BODY_TYPE — тип тела почтового сообщения: 'text' — текст, 'html' — HTML,

  • MESSAGE — тело письма с макросами,

  • ACTIVE — флаг активности шаблона: 'Y' или 'N'.

<?php
        $em = new CEventMessage();
        $result = $em->Add([
            'ACTIVE'     => 'Y',
            'EVENT_NAME' => 'ADV_CONTRACT_INFO',
            'LID'        => ['s1', 's2'],
            'EMAIL_FROM' => '#DEFAULT_EMAIL_FROM#',
            'EMAIL_TO'   => '#EMAIL_TO#',
            'BCC'        => '#BCC#',
            'SUBJECT'    => 'Тема сообщения',
            'BODY_TYPE'  => 'text',
            'MESSAGE'    => 'Текст сообщения',
        ]);
        ?>
        

Чтобы добавить кастомное поле, используйте массив ADDITIONAL_FIELD.

<?php
        $em = new CEventMessage();
        $em->Add([
            'ACTIVE'       => 'Y',
            'EVENT_NAME'   => 'MY_EVENT',
            'LID'          => ['s1'],
            'EMAIL_FROM'   => '#DEFAULT_EMAIL_FROM#',
            'EMAIL_TO'     => '#USER_EMAIL#',
            'SUBJECT'      => 'Привет!',
            'BODY_TYPE'    => 'text',
            'MESSAGE'      => 'Здравствуйте, #USER_NAME#!',
            'ADDITIONAL_FIELD' => [
                [
                    'NAME'  => 'envelope-from',
                    'VALUE' => '#DEFAULT_EMAIL_FROM#',
                ],
            ],
        ]);
        ?>
        

Вызвать почтовое событие

Почтовое событие можно отправить методом \Bitrix\Main\Mail\Event::send. Это аналог метода из старого ядра CEvent::Send. В метод передайте массив параметров события.

  • EVENT_NAME — код типа события.

  • LID — идентификатор сайта. Параметр принимает строку. Несколько сайтов перечисляйте через запятую: 's1,s2'.

  • C_FIELDS — данные для подстановки в макросы.

  • MESSAGE_ID — идентификатор почтового шаблона.

  • FILE — массив вложений. Поле принимает:

    • массив идентификаторов файлов, которые сохранены через CFile::SaveFile(),

    • массив абсолютных путей до файлов.

<?php
        use Bitrix\Main\Mail\Event;
        Event::send([
            'EVENT_NAME' => 'NEW_USER',
            'LID'        => 's1',
            'C_FIELDS'   => [
                'USER_EMAIL'   => 'user@example.com',  // макрос #USER_EMAIL# → ключ 'USER_EMAIL'
                'USER_ID' => 42,
            ],
        ]);
        ?>
        

Отправка письма не происходит мгновенно. Bitrix Framework добавляет событие в таблицу b_event. В конце выполнения страницы система автоматически обрабатывает очередь — как при вызове CEvent::CheckEvents. Этот механизм:

  • выбирает необработанные события из таблицы b_event,

  • генерирует письма по шаблонам,

  • отправляет письма,

  • записывает результат в поле SUCCESS_EXEC:

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

    • F — ни одно письмо не отправлено,

    • P — отправлены только некоторые письма,

    • 0 — шаблоны не найдены,

    • N — событие еще не обрабатывалось.

Пример кода, чтобы отправить файл во вложении:

<?php
        $fileId = false;
        if (!empty($_FILES['file'])) {
            $fileId = \CFile::SaveFile($_FILES['file'], 'mailatt');
        }
        \Bitrix\Main\Mail\Event::send([
            'EVENT_NAME' => 'VM_SERVICE_REQUEST',
            'LID'        => 's2',
            'C_FIELDS'   => [
                'EMAIL'        => $arCompany['PROPERTIES']['EMAIL']['VALUE'],
                'COMPANY_NAME' => $arCompany['NAME'],
                'MESSAGE'      => $request->getPost('MESSAGE'),
                'USER_NAME'    => $USER->GetFullName(),
                'USER_EMAIL'   => $USER->GetEmail(),
            ],
            'FILE' => $fileId ? [$fileId] : [],
        ]);
        if ($fileId) {
            \CFile::Delete($fileId);
        }
        ?>
        

Вместо \Bitrix\Main\Mail\Event::send можно использовать метод \Bitrix\Main\Mail\Event::sendImmediate(). Он отправляет письмо сразу, без добавления в очередь. Подходит для отладки или синхронных задач.

Настроить поведение почтовой системы

На отправку писем можно повлиять, если изменить настройки Главного модуля.

  • CONVERT_UNIX_NEWLINE_2_WINDOWS — конвертировать символы новой строки Unix формата в Windows формат при отправке email.

  • convert_mail_header — конвертировать 8-битные символы в заголовке письма.

  • all_bcc — email адрес или список адресов через запятую, на который будут дублироваться все исходящие сообщения.

  • fill_to_mail — дублировать email адрес в заголовок.

  • send_mid — отправлять в письме идентификаторы почтового события и шаблона.

Дополнительно можно задать константу ONLY_EMAIL. Если она определена, все письма отправятся только на указанный адрес, независимо от значений в шаблонах. Это удобно для тестирования. Например, в init.php:

define("ONLY_EMAIL", "dev@example.com");
        
Следующая