Отладка отправки почты на окружении BitrixEnv 7.5.5 с помощью MailCatcher

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Картинка для привлечения внимания ;)
Картинка для привлечения внимания ;)

Практически у каждого разработчика на Битрикс при переходе с уровня "сайт из 5 страничек" на уровень "крупный проект с 10к+ пользователями" возникает потребность производить отладку отправки почты, но при этом чтобы фактически пользователи эту почту не получали. Так как случайная отправка отладочного сообщения пользователям сайта из 5 страничек, которых обычно 5-6 человек, как правило ощутимых репутационных издержек не несет, что нельзя сказать о крупном проекте с большой пользовательской базой. Когда задачи не связаны с почтовой подсистемой, многие разработчики просто отключают отправку исходящей почты на своем dev окружении, также как то давно я выходил из этой ситуации переконфигурированием почтового сервера для безусловной отправки всех писем на определенный ящик. Не совсем удобное, даже "костыльное" решение на мой взгляд, так как в приходящих сообщениях получаем измененный заголовок получателя и проверить правильность в полной мере по сути невозможно, только с точки зрения контента отправляемого письма.

Недавно я начал искать, какие решения есть сейчас для отладки отправки почты без ее фактической отправки, при этом решение должно ставиться локально на сервер, так как большинство проектов у меня связаны с разработкой порталов на Битрикс24 Энтерпрайз, поэтому за использование внешних сервисов можно получить очень большой "нагоняй" от службы ИБ заказчиков. Если же вам больше подходит онлайн-сервис, который не нужно как-то устанавливать, а просто прописать в настройках msmtp окружения - можете посмотреть в сторону DebugMail, MailSlurp, TestMail. Их "гуглится" масса, можно выбрать на свой вкус, по функционалу, цене, длине шерсти и хвоста :) Единственный недостаток - сервисы в большинстве иностранные, поэтому платную версию из России будет купить проблематично.

Я же искал приложение, которое можно установить прямо на локальный сервер или компьютер. И после непродолжительных поисков нашел довольно интересный и устраивающий меня вариант - MailCatcher. Решение OpenSource (MIT Licence), соответственно с трансграничными оплатами заморачиваться не нужно, представляет из себя простой эмулятор SMTP сервера с web GUI, где письма отображаются. Написан на Ruby.

Логотип MailCatcher
Логотип MailCatcher

Подробно останавливаться на функционале приложения не буду - это прекрасно сделал на Хабре еще в 2014 году камрад @kriptomen в переведенной статье Отладка электронной почты при помощи MailCatcher. Я же подробно разберу процесс установки этого решения на типовом окружении BitrixEnv с точки зрения не Ruby разработчика :)

Веб-GUI приложения
Веб-GUI приложения

Установка и настройка MailCatcher на окружении BitrixEnv 7.5.5 операционной системы CentOS 7 X64

P.S. кто не любит читать вступления и прочую "воду" - статья "по существу" начинается отсюда :)

Для начала давайте условимся, что у нас уже есть сервер с установленным окружением BitrixEnv 7.5.5 (актуальная стабильная версия на момент написания статьи). Подробно установку окружения Битрикс на сервер в рамках статьи разбирать не будем - на эту тему есть много материалов в том числе от компании-разработчика Битрикс. Также сервер имеет доступ в Интернет, виден с нашего ПК в браузере и через ssh. IP адрес сервера для примера будет 10.0.0.1.

Итак, заходим по SSH с правами root на сервер где у нас установлено окружение, закрываем стандартное меню окружения "Manage server pool" для перехода в командную строку - либо нажимаем Ctrl+C либо 0 затем Enter.

Устанавливаем необходимые для сборки системные библиотеки, репозиторий и Ruby версии 3

yum update

yum install -y gcc gcc-c++ sqlite-devel centos-release-scl-rh centos-release-scl

yum --enablerepo=centos-sclo-rh  install -y rh-ruby30 rh-ruby30-ruby-devel

Нужно на момент написания статьи устанавливать именно 3 версию Ruby, на версиях ниже MailCatcher собираться отказывается.

Активируем Ruby для командной строки bash

scl enable rh-ruby30 bash

Это активирует ruby только на время текущего сеанса пользователя. Если для каких-то целей ruby в командной строке нужен постоянно, необходимо прописать команду в скриптах инициализации сеанса (например .bashrc):

source scl_source enable rh-ruby30

Собираем MailCatcher

gem install mailcatcher

Начнется довольно небыстрый процесс загрузки всех необходимых зависимостей и их сборки. У меня заняло примерно 5 минут. Обязательно нужно дождаться окончания данного процесса.

Разрешаем порт MailCatcher в iptables

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

iptables -I INPUT -p tcp -m tcp --sport 1080 -j ACCEPT

iptables -I INPUT -p tcp -m tcp --dport 1080 -j ACCEPT

service iptables save

Данные правила актуальны если вы запускаете GUI MailCatcher на порту 1080. Если же собираетесь для этих целей использовать другой порт - в командах выше указываете его.

Прописываем MailCatcher как SMTP сервер для сайтов окружения

Сделать это можно как через меню окружения (под админом выполнить cd ~ и далее ./menu.sh), выбрав пункт 6. Configure pool sites далее 4. Change a site's email settings, указываем название сайта для которого хотим прописать настройки, после чего вводим:

Enter From email address (ex. bob@example.org):test@test.ru

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

Enter server address or DNS (127.0.0.1):10.0.0.1

Вводим адрес сервера с BitrixEnv.

Enter server port (25):1025

Здесь указываем SMTP порт на который будем вешать SMTP эмулятор MailCatcher. По умолчанию - 1025.

Do you want to use SMTP authentication on 127.0.0.1:1025? (N|y) N

Авторизация по SMTP не нужна

Do you want to enable TLS for 127.0.0.1:1025 (n|Y):n

Шифрование тоже не нужно. После этого Битрикс будет отправлять всю исходящую почту для указанного сайта на порт эмулятора SMTP mailCatcher. Если нужно прописать настройки для всех сайтов, то в меню окружения выбираем сайт default, либо можно "руками" создать под пользователем bitrix файл /home/bitrix/.msmtprc и положить туда следующий текст настроек:

account default
logfile /home/bitrix/msmtp.log
host 10.0.0.1 
port 1025 
from test@test.ru
keepbcc on
auth off

Запускаем MailCatcher

Для запуска mailcatcher в виде фоновой службы (демона) достаточно выполнить следующую команду:

mailcatcher --ip 10.0.0.1 --no-quit --messages-limit 10000

Если все запустилось корректно - в команднйо строке отобразятся адреса и порты эмулятора SMTP сервера и адрес для входа в веб-интерфейс браузера.

Также я указал дополнительные команды по своему конкретному "вкусу", а именно:

--no-quit - скрывает кнопку Quit из веб-интерфейса, при нажатии которой Mailcatcher полностью останавливается. В моем случае приложение стоит на сервере где тестировщики проверяют корректность выполнения задач разработчиками, и очень часто по незнанию нажимали кнопку Quit думая что это обычная "разавторизация". В итоге после каждого такого случая демона приходилось перезапускать вручную, что не удобно. Вы для себя уже сами решайте нужна вам эта функция или нет.

--messages-limit 10000 - устанавливает максимальное количество сообщений которое хранит MailCatcher. На мой взгляд для теста 10000 сообщений вполне достаточно. Вы уже для своей ситуации решайте сами. Логика работы настройки - если писем становится больше 10000 - старые письма удаляются из списка.

Все доступные настройки запуска можно посмотреть выполнив команду:

mailcatcher --help

Проверяем все ли установилось корректно

Для начала проверяем корректность работы msmtp:

echo -e "test message" | /usr/bin/msmtp --debug -t -i name@site.ru

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

Далее для финальной проверки зайдите через браузер в административную часть Битрикс, установленного в окружении, далее перейдите в раздел "Проверка системы" и запустите проверку. Напротив пунктов "Отправка почтового сообщения" и "Отправка сообщения больше 64 Кб" должна отразиться зеленая строка "Успешно".

Далее тестовые письма должны отобразиться в интерфейсе MailCatcher:

Отправленные тестовые письма из Битрикс в MailCatcher
Отправленные тестовые письма из Битрикс в MailCatcher

Можно посмотреть как текст письма в виде HTML либо PlainText, так и исходники с заголовками, что очень удобно при отладке. В правом верхнем углу есть строка поиска по письмам и кнопка Clear - очищающая список писем.

Таким образом, мы интегрировали отладчик почты MailCatcher в стандартное окружение Битрикс - BitrixEnv. Всем спасибо за внимание!

Источник: https://habr.com/ru/articles/793902/


Интересные статьи

Интересные статьи

Если вы хотите написать проект, связанный с рыночными данными или торговлей на бирже, и вы знакомы с Java или Kotlin и слышали про Spring Boot, то эта статья для вас
Microsoft может работать над новой версией искусственного интеллекта, которая изменит взаимодействие с системами на Windows 11. В Dell продемонстрировали, каким оно может быть.
Загрязнение окружающей среды является одной из самых болезненных проблем современности, поисками решения которой занимаются специалисты самых разных областей науки. Одним из главных источников заг...
Tempest — это официальный компонент OpenStack для интеграционного тестирования. Tempest поддерживает три вида тестов: API, сценарии (scenario) и стресс-тесты (stress). API-тесты проверяют функциональн...
Представьте, что с одной стороны у вас есть видео на YouTube с интересными моментами из матча по Dota 2. А с другой стороны база данных всех матчей. Как для видео найти соответствующую запись в БД? Э...