Картинка для привлечения внимания ;)

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

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

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

Логотип MailCatcher

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

Веб-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

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

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