Почтовая инфраструктура
Наш email-сервис — Postfix/OpenDKIM SMTP, DKIM-отправка и кампании по доменам за одним API-ключом.
Dev-storyЗадача
Каждому продукту нужно было слать письма — подтверждения, алерты, кампании — и не хотелось, чтобы каждый сам поднимал SMTP, DKIM и репутацию отправителя.
Что делали
Один почтовый сервис: API, который подписывает DKIM, управляет from-адресами и API-ключами, обрабатывает транзакционные письма и запланированные кампании со статистикой открытий/кликов и триггерами автоматизации. Приложения POST'ят на `mailer.webedge.dev/api/v1/send` с ключом.
Результат
Календарь, ePokalbis и другие приложения шлют через этот один сервис, а доставляемость (DKIM, from-адрес) ведётся в одном месте, а не в каждом проекте.
Dev-story статья
Почтовая инфраструктура: как создавался проект
Каждому нашему приложению нужно слать письма — коды, чеки, алерты, кампании — а обычный ответ это сторонний отправитель, которого не видишь и платишь за сообщение. Хотели свой путь: настоящий SMTP-стек, который держим сами, DKIM-подписанный и мультидоменный, за одним API, чтобы ни одно приложение не касалось SMTP.
Разделы
05
Модули
04
Стек
Node.js + Postfix
Почему появился проект
Каждому продукту нужно было слать письма — подтверждения, алерты, кампании — и не хотелось, чтобы каждый сам поднимал SMTP, DKIM и репутацию отправителя.
Каждому нашему приложению нужно слать письма — коды, чеки, алерты, кампании — а обычный ответ это сторонний отправитель, которого не видишь и платишь за сообщение. Хотели свой путь: настоящий SMTP-стек, который держим сами, DKIM-подписанный и мультидоменный, за одним API, чтобы ни одно приложение не касалось SMTP.
Что было создано
Один почтовый сервис: API, который подписывает DKIM, управляет from-адресами и API-ключами, обрабатывает транзакционные письма и запланированные кампании со статистикой открытий/кликов и триггерами автоматизации. Приложения POST'ят на `mailer.webedge.dev/api/v1/send` с ключом.
Начал как собственный SMTP-core (Postfix + OpenDKIM + REST API), вырос в профессиональный сервис v2, затем v3 с мультидоменом, Vue-дашбордом и системой auth. Приложения отдают сообщение одному API-ключу; сервис подписывает его (DKIM/SPF/DMARC), отправляет и записывает, что реально ушло, а работает за nginx reverse proxy.
Основные модули и путь пользователя
Один API-ключ, одна точка интеграции: транзакционные отправки и запланированные кампании идут через один сервис, так что ни одно приложение не носит свои SMTP-креды или логику.
DKIM-подпись, мультидомен: OpenDKIM подписывает исходящую почту по домену, так что доставляемость и репутация домена ведутся централизованно, а не в каждом приложении.
Vue-дашборд и система auth делают его управляемым — домены, отправки и кампании ведутся в UI, а не в конфиг-файлах.
Работает за nginx reverse proxy с trust-proxy, так что сервис видит реальные адреса клиентов и остаётся деплоящимся как обычная инфраструктура.
Архитектура и технологические решения
Сделано на Node.js, Postfix, DKIM.
Node.js-сервис; Postfix + OpenDKIM для SMTP и слоя подписи; REST API как единая точка входа; Vue-фронтенд и auth для управления; nginx reverse proxy впереди.
Результат и выводы
Календарь, ePokalbis и другие приложения шлют через этот один сервис, а доставляемость (DKIM, from-адрес) ведётся в одном месте, а не в каждом проекте.
Mailer, которым владеем целиком: DKIM-подписанная транзакционная почта и кампании по доменам за одним API-ключом, так что каждое приложение WebEdge шлёт через один контролируемый наблюдаемый путь, а не через арендованный чёрный ящик.
Читать дальше
Связанные истории проектов
Эти проекты близки по техническим или продуктовым решениям и показывают, как тот же принцип работает в другом контексте.
Dev-storyCMS
Динамический headless-CMS на webedge-db — типы контента, медиа, роли и публичный read-API, питающий наши сайты и статьи.
Реактивная база данных
Реактивная база данных
Наш реактивный BaaS на native SpacetimeDB — ~200k realtime-доставок/с, p95<20мс.
Dev-storyMTP-RDMA инференс-кластер
Тензорный 27B на двух Mac по Thunderbolt RDMA — ~70 → 90–100 tok/s.
Есть похожая идея?
Обсудить проект