Как запустить локальный SMTP-сервер с помощью MailHog

5 минут чтения
Средний рейтинг статьи — 4.6

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-приложений.

5 минут чтения
Средний рейтинг статьи — 4.6

Настроить мониторинг за 30 секунд

Надежные оповещения о даунтаймах. Без ложных срабатываний