Разрабатывая новую версию платформы Абрикос у меня появилась идея автоматической отладки e-mail сообщений отправляемых движком. В текущей версии движка <= 0.5.6 можно в настройках включать сохранение отправляемых сообщений в файл, но это крайне не удобно.
Была поставлена следующая задача:
— в новой версии упор сделан на REST API движка с покрытием тестами. Сборщик и покрытие тестами осуществляется в Node.js, поэтому желательно, чтобы e-mail отладчик дружил с Node.js;
— тест REST API платформы Абрикос должен работать так: скачали сборку -> запустили тест -> тест запускает виртуальный SMTP-сервер -> движок отправляет письма в процессе прохождения теста -> виртуальный SMTP-сервер перехватывает сообщения и сохраняет их в удобном формате JSON -> тестер запрашивает отправленное сообщение у SMTP-сервера по идентификатору messageId -> по окончанию теста SMTP-сервер закрывается;
— возможность просматривать отправляемые e-mail сообщения в браузере.
Погуглив на предмет запрашиваемых возможностей ни чего подходящего не нашел, кроме simplesmtp для Node.js. И то, в реадми simplesmtp было сказано что его разработка прекращена в пользу полноценного SMTP-сервера Haraka
Разобравшись с Haraka понял, что при незначительной доработке, это то, что нужно.
В итоге был разработано приложение SMTPeshka на базе Haraka (плагин JSON) со всеми выше перечисленными возможностями.
Итак, встречайте — Виртуальный SMTP-сервер под Node.js SMTPeshka
Лицензия MIT
Исходники на Github: https://github.com/abricos/smtpeshka
Пакет NPM: https://www.npmjs.com/package/smtpeshka
Текущая стабильная версия: 0.1.0
Возможности:
— запуск виртуального SMTP-сервера и Web-панели из командной строки;
— перехват отправляемых e-mail сообщений из сторонних приложений и сохранением их в файл JSON;
— просмотр отправленных e-mail через в панели через Веб-браузер;
— REST API для просмотра отправленных e-mail.
Установка SMTPeshka
Ставим Node.js и NPM, описывать не буду, в интернете полно статей на любой вкус и цвет.
Ставим smtpeshka через npm в глобальное хранилище:
$ [sudo] npm install -g smtpeshka
Запуск SMTPeshka
Создаем папку рабочего проекта, например my-smtp-test и запускаем в ней smtpeshk-у:
$ mkdir my-smtp-test
$ cd my-smtp-test
$ smtpeshka
В этот момент будет запущен виртуальный SMTP-сервер на 2525-м порту и Веб-сервер для работы панели управления в браузере и REST API на localhost порт 2580
Настройка
В директории запуска smtpeshk-и создайте файл конфигурации в формате JSON: smtpeshka.json
Например:
"log": {
"console": {
"level": "debug"
}
},
"web": {
"port": 12580
},
"SMTP": {
"port": 12525
},
"transport": {
"json": {
"saveto": "<%= directory %>/my-emails"
}
},
"haraka": {
"config": {
"build": {
"dir": "<%= directory %>/tmp"
}
}
}
log.console.level=[error]|[warn]|[info]|[debug] — режим логирования
web.port — порт для работы панели управления в браузере и REST API
SMTP.port — порт для Виртуального SMTP-сервера
transport.json.saveto — директория для сохранения отправленных e-mail (значение <%= directory %> указывает на текущую директорию запуска smtpeshk-и)
haraka.config.build.dir — временная папка для хранения рабочих файлов сервера Haraka.
Отладка e-mail сообщений
Настройте ваше приложение, которое будет отправлять e-mail на отправку через SMTP-сервер:
host: localhost
port: 2525 (или тот, который укажите в настройках smtpeshk-и)
Запустите smtpeshk-у и потом ваше приложение и отправьте в нем e-mail сообщение.
Это сообщение не будет доставлено адресату, а будет сохранено в файл директории sent-emails (или ту, которую укажите в настройках smtpeshk-и)
Теперь откройте в браузере панель просмотра отправленных сообщений по адресу: localhost:2580
Если все сделано правильно, то в браузере вы увидите ваши e-mail-ы
Статья актуальна для версии SMTPeshka 0.1.0, поэтому более подробную и актуальную информацию вы можете получить на сайте проекта: https://github.com/abricos/smtpeshka
Вопросы и пожелания оставляйте в комментариях или в баг-трекере проекта на GitHub.
Пулл-реквесты приветствуются. Даже если вы нашли опечатку, ошибку в документации, не проходите мимо, отправляйте свой пулл-реквест, он не останется не замеченным.