← На главную

Posthorn заменяет SDK для отправки писем в self-hosted

27.05.2026 04:26 · hackernews

В 2026 году никто в здравом уме не поднимает свой почтовый сервер. Self-hosted операторы платят Postmark, Resend, Mailgun или AWS SES — дёшево, доставляемость хорошая, SPF/DKIM/DMARC чужая головная боль. Но беда в том, что каждое приложение в стеке (контактная форма на Hugo, админские письма Ghost, magic links от Gitea, нотификации Mastodon, Cloudflare Worker с паролями) тащит свой SDK, свой API-ключ, свои костыли для повторных отправок и обработки баунсов. Плюс DigitalOcean, Lightsail, Linode и Vultr тупо блокируют исходящий SMTP — приложения, которые умеют только SMTP, там не работают без извращений.

Craig McCaskill написал Posthorn — единый шлюз. Один контейнер, один TOML-конфиг, один набор кредов. Приложения стучатся в Posthorn, Posthorn рулит провайдером. У шлюза три входа: HTTP-форма (с honeypot, Origin/Referer-валидацией, rate limit и опциональным CSRF), HTTP API (Bearer-токен, JSON, идемпотентность) и SMTP-приёмник (AUTH PLAIN, обязательный STARTTLS, allowlist отправителей и получателей, парсит MIME). Все три сходятся в единый transport.Message и летят в один из пяти транспортов: Postmark, Resend, Mailgun, AWS SES (с кастомной SigV4) или outbound-SMTP-реле. Переключить провайдера — правка одной строчки в TOML.

Posthorn не почтовый сервер (нет IMAP/JMAP, нет MX, не хранит письма — для этого Stalwart, Mailcow, iRedMail). Не своя инфраструктура доставки (не управляет репутацией IP — для этого Postal, Hyvor Relay). Не маркетинговая платформа (нет списков, сегментации, кампаний — смотрите Listmonk). Не веб-интерфейс почты (Roundcube, Snappymail, если нужно читать). Он ровно один слой — интеграционный: вклинивается между self-hosted приложениями и внешним transaction-провайдером.

В репозитории на GitHub — Go-бинарь, мультиархитектурный distroless Docker-образ. Всё хозяйство: парсер TOML, библиотека UUID и LRU-кэш. Ни одного вендорского SDK. Из коробки — /healthz и /metrics для Prometheus, rate limit по 5 запросов в минуту на публичную форму, идемпотентность на 24 часа, одна повторная попытка на таймауте, одна на 429. На v2 в планах SQLite-лог, очередь ретраев через перезапуск, автоматическая супрессия на хард-баунсах, вебхуки с HMAC, RFC 8058 one-click unsubscribe, аттачи, HTML-тело, мульти-аутпут (емейл + вебхук + лог). v3 — админка, proof-of-work спам-фильтр, PGP. Но это если комьюнити подтянется.

Перед продакшеном обязательны SPF, DKIM и DMARC на домене отправителя, reverse proxy (Posthorn не терминирует TLS сам), allowed_origins для форм и rate limit. Иначе любой может долбить ваш эндпоинт.

Читать оригинал →