Как запустить локальный SMTP-сервер с помощью MailHog
MailHog решает множество проблем, связанных с тестированием email-рассылок.
Допустим, вы разрабатываете сайт на WordPress в локальной среде. Протестировать форму обратной связи или любую другую отправку почты в этом случае может быть настоящей головной болью.
Как правило, задача по отправке писем ложится на SMTP-сервер приложения. Но в локальной среде он почти никогда не работает «из коробки» — по целому ряду причин.
Прежде всего, нужно настроить операционную систему, веб-сервер и само приложение для поддержки отправки почты. Затем — убедиться, что письма действительно доходят до адресата, что может отнять кучу времени (и забить вашу почту тестовыми сообщениями).
Кроме того, для тестов приходится использовать реальные email-адреса, что может негативно сказаться на их репутации.
MailHog решает все эти задачи. Он разворачивает мокап SMTP-сервер, который можно подключить к приложению и использовать для отправки и приёма писем. Все письма сохраняются в удобном веб-интерфейсе, имитирующем настоящий почтовый ящик.
И, наконец, MailHog предоставляет API для получения писем, что удобно использовать в автотестах. Как именно — зависит от ваших задач.
Основные возможности:
- Принимает письма через SMTP (порт 1025)
- Веб-интерфейс для чтения писем (
http://localhost:8025
) - REST API для управления письмами
- Поддержка запуска в Docker
- Быстрая интеграция с любым backend-языком
Установка MailHog
Вариант 1: через Go
Если у вас установлен Go:
go install github.com/mailhog/MailHog@latest
После этого бинарный файл окажется в $GOPATH/bin
, поэтому желательно добавить этот путь в переменную окружения PATH
. Запустить можно командой:
MailHog
Вариант 2: через Docker
Это самый универсальный и удобный способ:
docker run -d -p 1025:1025 -p 8025:8025 mailhog/mailhog
- SMTP-сервер будет слушать порт
1025
- Веб-интерфейс доступен на
http://localhost:8025
Настройка приложения
Чтобы приложение отправляло письма через MailHog, укажите SMTP-параметры:
SMTP_HOST=localhost
SMTP_PORT=1025
Например, в Node.js с использованием nodemailer
:
const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({
host: 'localhost',
port: 1025,
secure: false,
});
await transporter.sendMail({
from: 'test@example.com',
to: 'user@example.com',
subject: 'Привет!',
text: 'Это тестовое письмо через MailHog.',
});
В Laravel:
MAIL_MAILER=smtp
MAIL_HOST=127.0.0.1
MAIL_PORT=1025
MAIL_ENCRYPTION=null
Или Django:
# settings.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 1025
EMAIL_USE_TLS = False
Веб-интерфейс MailHog
Откройте http://localhost:8025, чтобы посмотреть письма:
- Просмотр HTML и plain-текста
- Просмотр заголовков и технической информации
- Возможность удалить все письма или отдельные
- Поддержка поиска по адресу/теме
MailHog API
MailHog предоставляет HTTP API, доступное по адресу http://localhost:8025/api/v2/messages
. Вы можете:
- Получить список писем
- Удалить все письма
- Получить raw-содержимое письма по ID
Пример запроса:
curl http://localhost:8025/api/v2/messages
Использование в автотестах
MailHog можно интегрировать в end-to-end тесты, чтобы проверять факт отправки писем. Например, при регистрации пользователя можно запросить последнее письмо и убедиться, что пришло письмо с нужной темой или токеном подтверждения.
Использование в CI/CD
В CI/CD пайплайнах (например, GitHub Actions или GitLab CI) MailHog удобно использовать в Docker-контейнере, добавляя его как отдельный сервис.
Пример для GitHub Actions:
services:
mailhog:
image: mailhog/mailhog
ports:
- 1025:1025
- 8025:8025
Альтернативы MailHog
Если вам нужны более продвинутые функции, можно рассмотреть:
- Mailpit — форк MailHog с поддержкой вложений и улучшенным UI
- MailCatcher — аналог на Ruby
- Papercut SMTP — для Windows
Но MailHog остаётся самым простым и универсальным вариантом.
Поддерживает ли MailHog SMTP-аутентификацию или TLS?
Нет, MailHog не поддерживает SMTP AUTH и шифрование TLS/SSL. Он предназначен только для локальной разработки и тестирования, где безопасность не является критическим фактором.
Заключение
MailHog — простой и мощный инструмент для локального тестирования email-рассылок. Он легко интегрируется в любое приложение, экономит время и предотвращает случайные отправки писем в прод. Настоятельно рекомендуем добавить его в арсенал при разработке backend-приложений.
Настроить мониторинг за 30 секунд
Надежные оповещения о даунтаймах. Без ложных срабатываний