Налагодження електронної пошти за допомогою 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

Можливо третій команда вам не знадобиться, але я використовую досить мінімалістичний образ 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. Погляньте на код нижче:
 
<?php require_once('mail-loader.php'); ?>
<html>
<head>
    <title>Simple MailCatcher PHP Example</title>
</head>
<body>
    <h1>Simple MailCatcher PHP Example</h1>
    <p>This application sends a number of emails which will be caught by MailCatcher. To check them, view them in <a href="http://192.168.56.111:1080/" target="_blank">the local MailCatcher installation</a></p>
</body>
</html>

Він, у свою чергу підключає
mail-loader.php
:
 
<?php
require('vendor/autoload.php');
$email = 'matthew@example.com';
$subject = 'testing';
$message = 'test message';

$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
, як на зображенні нижче, то увидем заголовки листа:
 image
3-тя вкладка дозволить нам використовувати Fractal для аналізу вмісту листа. Її я пропущу, тому що це трохи виходить за рамки сьогоднішньої статті.
 
 

Все готово для роботи

Тепер, встановивши MailCatcher ми можемо посилати електронний листи, встановивши одержувачів, тему, додаючи вкладення і т.д. Можемо писати тести, перевіряючі весь процес роботи програми, знаючи, що реальні користувачі не отримають листи, для них не призначені. Це не може не радувати.
 
 

Висновок

Мій приклад досить тривіальний, і я впевнений, що ваша кодова база складнішими і витонченішими, але незалежно від цього практично без яких би то не було змін у вашому коді ви можете користуватися перевагами роботи з MailCatcher і бути спокійні.
 
Може бути ви вже використовуєте MailCatcher? Що ви можете сказати про підсумки його інтеграції, чи були якісь питання, які застали вас зненацька. Буду радий, якщо ви поділитеся своїми думками.
  
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.