23 сентября 2022
599
Разрабатываю шаблоны писем на сайте, хочу потестировать, как будут выглядеть письма при отправке. Как это сделать локально, не привлекая боевой сайт?


На этот вопрос много вариантов ответов, в зависимости от ситуации.

Здесь рассмотрим такой вариант:

  1. Разработка ведется с помощью docker-контейнера, собранного по шаблону cronfy/lamp*-lik
  2. Сайт на Битриксе.

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

Агенты должны работать на cron, а не на хитах

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

Для агентов на cron в dbconn.php должно быть прописано следующее:

define("BX_CRONTAB_SUPPORT", true);

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

Один из таких модулей, например, Отправка почты через SMTP. Если такой модуль используется, нужно его отключить.

Иными словами, почта должна отправляться штатным функционалом Битрикса.

Запуск maildev

maildev - это специальный сервер, который принимает почту по SMTP и показывает все письма, которые в него прислали, в веб-интерфейсе. Веб-интерфейс похож на обычную веб-почту, только очень простую.

Чтобы запустить этот сервер, нужно:

  1. Запустить команду maildev внутри docker-контейнера.
www-data@32b8c72346ae:/app$ maildev 
MailDev webapp running at http://0.0.0.0:1080
MailDev SMTP Server running at 0.0.0.0:1025
  1. Не останавливать её. Пусть работает.

Зайти в веб-интерфейс теперь можно браузером по имени сайта, только нужно указать дополнительно адрес порта. Адрес порта подсказывает сам maildev в тексте, который он выводит после запуска. Обычно это порт 1080.

Итак, если наш локальный сайт называется mysite.dev.loc, то веб-интерфейс будет доступен по ссылке http://mysite.dev.loc:1080.

adf15727-5bd5-40e4-a885-35f0b46fdd8b.png


Отправка почты

Теперь можно сделать что-нибудь, что отправит письмо из Битрикса. Отправили (например, оформили заказ). Но сразу оно в веб-интерфейсе не появится.

Это потому что мы настроили запуск агентов по cron. Битрикс при отправке писем не отправляет их сразу, а сначала кладет в очередь, а потом, при запуске агентов, почтовый агент начинает их потихоньку отправлять (чтобы посетитель сайта при загрузке страниц не ждал, когда отправятся письма).

Теперь, чтобы Битрикс реально отправил письмо, надо запустить агентов. Для этого нужно зайти в контейнер и выполнить там команду:

php www/bitrix/modules/main/tools/cron_events.php

Это запустит битриксовый обработчик событий, и почтовый агент отправит накопившиеся письма.

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

В последующие запуски команда обычно отрабатывает быстро.

ВАЖНО, что эта команда запустит ВСЕХ агентов.
То есть, если на сайте настроены агенты, которые взаимодействуют со внешними сервисами (например, отправляют новые заказы в 1С или проверяют оплату в Яндекс.Кассе), то крайне важно их сначала отключить. Иначе есть шанс, что с вашей локальной копии проекта уйдут какие-нибудь тестовые данные в 1С, или обработаются какие-нибудь реальные оплаты заказов в Яндекс.Кассе, а боевой сайт потом эти оплаты не увидит, и т. п.

Просмотр почты

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

Там можно посмотреть, как выглядит письмо, в том числе переключиться в режим, который показывает технические заголовки письма, если это необходимо.

Как это работает

На самом деле в контейнерах cronfy/lamp*-lik установлена еще одна программа - catchmail. PHP в контейнере настроен так, что вместо обычной команды sendmail, которая стандартно используется для отправки почты, запускается catchmail. Выглядит это примерно так в php.ini:

sendmail_path = /usr/local/bin/catchmail-wrapper -t

А catchmail в свою очередь настроен так, что он просто перенаправляет все письма по SMTP в почтовый сервер maildev.

Позвоните нам!
Личный кабинет
Вам будет доступна история заказов, управление рассылками, свои цены и скидки для постоянных клиентов и прочее.
Ваш логин
Ваш пароль
Работаем для вас с 9:30 до 18:30
Ждем писем!
г. Санкт-Петербург, Краснопутиловская ул., 69