Встроили почтовый клиент прямо в свой таск-трекер за два дня
Делюсь небольшим внутренним проектом. У нас есть свой трекер задач, в котором ведём проекты. Но переписка с клиентами всегда жила отдельно: общий ящик на одном сервисе, личные ящики на другом, а задачи по этим же клиентам в трекере. Классическая боль, когда письмо в одном окне, работа в другом, а связь между ними только в голове у сотрудника.
Решили встроить почту прямо в трекер. Расскажу, как сделали без своего почтового сервера.
Ключевая идея - разделить приём и отправку.
Приём писем взял на себя отдельный модуль внутри бэкенда: небольшой SMTP-сервер на Node.js слушает 25-й порт, проверяет подписи SPF/DKIM/DMARC, парсит письмо, складывает вложения в объектное хранилище, а текст в базу.
Отправку отдали облачному сервису рассылки, совместимому с протоколом Amazon SES. У него готовая репутация IP и автоматическая DKIM-подпись, поэтому письма не улетают в спам, а нам не нужно содержать и греть собственный почтовый сервер. Главная боль обычного почтового сервера ведь не в том, чтобы его поднять, а в том, чтобы годами поддерживать доставляемость.
По функциям получился привычный почтовый клиент: письма собираются в цепочки, есть папки (входящие, отправленные, черновики, корзина), вложения, пересылка, поле «копия», удаление с подтверждением. HTML-письма рендерим в изолированном окне без выполнения скриптов, чтобы чужой код не лез в интерфейс.
Отдельно сделали черновики с автосохранением: закрыл вкладку или перезагрузил страницу - недописанное письмо на месте, открываешь и продолжаешь.
Ящики привязываются к сотрудникам: общий видят все, личный только владелец. Приём настроен так, что письмо на любой адрес домена не теряется, даже если ящик под него ещё не завели.
По стеку: бэкенд на NestJS и PostgreSQL, фронт на Nuxt 3 с серверным рендерингом. Самое забавное - вся разработка от идеи до рабочего продукта заняла два дня. Полноценный почтовый клиент с цепочками, вложениями, папками и черновиками за два дня. Когда есть готовая архитектура и опыт, многие вещи сегодня собираются куда быстрее, чем кажется.
Если интересны технические детали и больше скриншотов, подробный разбор есть в блоге: https://webcetera.ru/blog/pochta-vnutri-trekera-keys/











