[Перевод] Отладка электронной почты при помощи MailCatcher

imageВы используете в своем приложении электронную почту, не так ли? Это, в общем-то, риторический вопрос, конечно используете. Ей уже больше 30 лет, а это по прежнему самое популярное средство коммуникации на планете. Вот некоторые статистические данные от Pingdom:2,2 млрд. — Количество пользователей электронной почты по всему миру 144 млрд.- Объем отправляемых электронных писем ежедневно во всем мире 4,3 млрд.- Количество почтовых клиентов во всем мире Потрясающе! Зачем нужна эта статья? По одной простой причине, с которой мы все так или иначе сталкиваемся. Необходимо тестировать функционал как можно ближе к реальному применению, и любая ошибка может привести к тому, что наши клиенты получат тестовые письма, и это будет печально.Я уверен, вы знаете о чем я говорю. Думая, что перевели приложение в режим отладки, вы запускаете тест, который отправляет письма из вашего приложения. Вы думаете что никто кроме вас не увидит эти письма.

Тесты проходят, вы хвалите себя и продолжаете работу. Но спустя некоторые время вы получаете звонок от своего заказчика. Он жалуется, что его клиенты получили странные. Он расстроен и хочет получит ответ.

Было такое? Не хочется, чтобы повторилось? Есть решение — MailCatcher. Если вы не слышали о нем то вкратце:

… Супер-простой SMTP-сервер, который перехватывает любое отправленное сообщение и выводит его в веб-интерфейсе. Запустите mailcatcher, в настройках вашего приложения укажите smtp://127.0.0.1:1025 вместо SMTP-сервера по умолчанию, и затем просматривайте почту, которая была отправлена по адресу http://127.0.0.1:1080

Неплохо звучит, верно? Независимо от того, устали ли вы, перегружены работой, есть ли новенький в команде или еще какая беда — MailCatcher гарантирует, что электронная почта останется в пределах вашей сети, или даже вашей виртуальной машины.

Сейчас я хочу показать вам, как настроить, запустить и использовать MailCatcher.

Подготовленная виртуальная машина Чтобы сэкономит немного вашего времени, я создал Vagrant box с уже настроенным MailCatcher. Убедитесь, что Vagrant и VirtualBox у вас установлены и клонируйте себе репозитарий, используя следующую команду: git clone git@github.com: sitepoint-examples/mailcatcher-article.git Затем, перейдя в полученный каталог исполните команду: vagrant up Будет запущен процесс инициализации виртуальной машины. Настройки её довольно минималистичны, в комплект входит MailCatcher, Sendmail и Nginx. Прим. пер.: если вы используете puphpet (что это) для сборки виртуальных машин, то замечу, что установка MailCatcher доступна в нем как опция, ну и куча других плюшек, рекомендую.

Установка MailCatcher вручную Если вы желаете установить MailCatcher сами, то вот последовательность команд: sudo apt-get install -y vim curl python-software-properties lynx nginx sudo apt-get install -y php5-fpm php5-memcache memcached php-apc sudo apt-get install -y build-essential libsqlite3-dev ruby1.9.3 sudo gem install mailcatcher sudo mailcatcher --http-ip 0.0.0.0 Возможно 3-я команда вам не понадобится, но я использую довольно минималистичный образ Ubuntu Precise 64, и нужных пакетов не оказалось. Если вы используете другой дистрибутив, пакеты и их версии могут отличаться от приведенных выше.Примечание. При стандартном запуске MailCatcher будет слушать только ip 127.0.0.1 и порт 1025, в этом случае мы не увидели бы его извне. Я изменил конфигурацию так, чтобы она прослушивала все ip-адреса и добавил public ip 192.168.56.111.

Веб-интерфейс MailCatcher Теперь, перейдя по http://192.168.56.111:1080 вы можете наблюдать веб-интерфейс, выглядеть это будет вот так: Веб-интерфейс MailCatcherИнтерфейс довольно лаконичный, в верхней его части находится список электронных писем, полученным MailCatcher. Когда в списке есть письма, то в нижней части будет выведена информация о них, что мы увидем чуть позже.Пример использования Для этой статьи я создал простой php-скрипт, index.php, он присутствует в репозитарии, у нас он доступен по адресу http://192.168.56.111. Для отправки писем используется библиотека SwiftMailer. Взгляните на код ниже: Simple MailCatcher PHP Example

Simple MailCatcher PHP Example

This application sends a number of emails which will be caught by MailCatcher. To check them, view them in the local MailCatcher installation

Он, в свою очередь подключает mail-loader.php:

$transport = Swift_SmtpTransport: newInstance ( «localhost», 1025 );

$message = Swift_Message: newInstance (); $message→setTo (array ( «matthew@maltblue.com» => «Matthew Setter», )); $message→setSubject ( «This email is sent using Swift Mailer» ); $message→setBody («You’re our best client ever.»); $message→setFrom («matthew@localhost», «Your bank»);

$mailer = Swift_Mailer: newInstance ($transport); $mailer→send ($message, $failedRecipients); print_r ($failedRecipients); Если вы не знакомы с SwiftMailer статья Аурелио на SitePoint будет хорошим стартом в её изучении. Кстати, это его код я использовал для этого примера. Спасибо, Аурелио.

Из приведенного скрипта для нас, в принципе, важна только одна строчка кода:

$transport = Swift_SmtpTransport: newInstance ( «localhost», 1025 ); Здесь создается соединение с smtp-сервером MailCatcher, ничего сложного. Давайте перезагрузим страницу 3 раза, чтобы отправилось 3 письма. Вот они, на изображении ниже: imageВыбрав первую запись мы видим информацию о письме, а также его тело. Если мы перейдем на вкладку Source, как на изображении ниже, то увидем заголовки письма: image3-я вкладка позволит нам использовать Fractal для анализа содержимого письма. Её я пропущу, т.к. это немного выходит за рамки сегодняшней статьи.Все готово для работы Теперь, установив MailCatcher мы можем посылать электронный письма, установив получателей, тему, добавляя вложения и т.д. Можем писать тесты, проверяющие весь процесс работы приложения, зная, что реальные пользователи не получат письма, для них не предназначенные. Это не может не радовать.Заключение Мой пример довольно тривиален, и я уверен, что ваша кодовая база более сложна и изощренна, но независимо от этого практически без каких бы то ни было изменений в вашем коде вы можете пользоваться преимуществами работы с MailCatcher и быть спокойны.Может быть вы уже используете MailCatcher? Что вы можете сказать об итогах его интеграции, были ли какие-то вопросы, которые застали вас врасплох. Буду рад, если вы поделитесь своими мыслями.

© Habrahabr.ru