Немного теории
Терминология
Для отправки электронных писем из системы следует понимать их структуру и жизненный цикл.
В коде фреймворка в модулях и компонентах отправка писем в основном инициируется методом \Bitrix\Main\Mail\Event::send. Для его вызова нужно указать тип почтового события. Система отыщет подходящие почтовые шаблоны для этого события, подключит тему оформления и отправит письма получателям.
Почтовый шаблон определяет содержательную часть тела письма, получателя, отправителя и тему. В шаблоне можно использовать почтовые макросы.
Тип почтового события группирует почтовые шаблоны и определяет макросы для этого типа почтового события.
Тема оформления определяет шаблон письма, его шапку и подвал (как в шаблонах сайта).
Макросы
При отправке почты для работы почтовых шаблонов может потребоваться уточняющая информация. Например, для отправки письма типа «Зарегистрировался новый пользователь [NEW_USER]» нужно указать, что именно за пользователь только что был зарегистрирован.
При вызове метода \Bitrix\Main\Mail\Event::send программист должен передать в аргументах поля USER_ID, NAME и т.д. Как эти поля будут выглядеть в самом письме, решается уже при настройке почтового шаблона.
В системе есть предустановленные макросы:
- #DEFAULT_EMAIL_FROM# - E-Mail адрес по умолчанию (устанавливается в настройках).
- #SITE_NAME# - Название сайта (устанавливается в настройках).
- #SERVER_NAME# - URL сервера (устанавливается в настройках).
Через обработчик почтового события OnBeforeEventAdd список полей для макросов может быть расширен.
Очередь отправки
Большинство писем отправляется не сразу, а попадает в таблицу БД b_event, откуда уже на хитах или на кроне (зависит от настроек сайта) отправляется небольшими порциями. Это позволяет уберечь сайт от нагрузки, если возникла необходимость отправить тысячи писем.
У письма в очереди есть статус, по которому можно точно сказать, что происходит с письмом. Это столбец SUCCESS_EXEC. Признаком успеха отправки письма будет статус Y, ошибки — F. Более подробное описание статусов вы найдете в документации платформы (смотрите список полезных ссылок в конце)
Письмо может быть отправлено в обход очереди, если использовать метод Bitrix\Main\Mail\Event::sendImmediate
Отправка файлов
К письмам можно прикреплять файлы вложений. Это можно сделать на уровне почтового шаблона для статических вложений (например, карточка партнера или презентация о компании) через интерфейс администратора сайта. Такие вложения будут одинаковыми для всех получателей письма.
Если нужно более тонкое управление вложениями (например, для каждого получателя прикреплять историю его операций за последний месяц), то нужно использовать один из аргументов метода \Bitrix\Main\Mail\Event::send.
Верстка в письмах
В почтовых рассылках используется язык разметки HTML, но в урезанном виде. Для такой верстки по-прежнему актуальна кроссплатформенность, потому что возможности почтовых браузеров Gmail, Yandex, mail.ru и прочих отличаются друг от друга.
В таких рассылках по прежнему встречается табличная верстка (от чего давно отказались в “основном” HTML для сайтов).
Запрещено использование отдельных CSS-правил, так как большинство почтовых клиентов их не воспринимает. Поэтому стили должны быть записаны в атрибуте style.
Это лишь базовые правила, более актуальную и полную информацию по верстке писем вы можете найти на специализированных ресурсах
Почтовые компоненты
Для некоторых писем может быть необходимо получить информацию из БД сайта. Запрещено использовать прямые запросы, для этого есть механизм почтовых компонентов, аналогичный компонентам сайта. Для таких компонентов тоже есть режим настройки, система шаблонов и возможность кеширования. Используйте стандартные почтовые компоненты и не бойтесь создавать свои, когда возможностей платформы станет недостаточно для ваших задач.
Практика
В этом видео мы улучшим внешний вид уже созданного электронного письма, которое отправляет письмо при запросе пользователем смены пароля.
Рассмотрим:
- Шаблоны писем.
- Компоненты для писем.
- Шаблоны компонентов для писем.
Почтовые уведомления
6 мин