Почта на своём домене за вечер: Mailcow, письма о заявках и подтверждение подписки
Порядок работ от чистого VPS до писем клиенту: что проверить до оплаты сервера, почему Mailcow ставится после сайта и как писать письма о заявках и подтверждении подписки ещё до того, как почта поднята.
Ставил почту на домен проекта недвижимости — сайт, база, аналитика и Mailcow на одной машине. Сам Mailcow разворачивается быстро. Вечер уходит на то, что вокруг: проверки перед покупкой сервера, DNS, порядок запуска. Ниже — как я это делал и где чуть не потерял день.
Почему почта идёт последней
Портами 80 и 443 владеет nginx сайта. Он поднимается первым, держит домен и сертификаты. Mailcow тоже хочет эти порты — для веб-панели и выпуска TLS. Поставите его раньше — будете разбирать конфликт руками в тот момент, когда сайт уже должен отвечать посетителям.
Порядок такой: сайт в Docker Compose → TLS через certbot → почта. У меня в стеке Next.js, Postgres, Redis, Umami и nginx, поверх — GitHub Actions на push в main. Почта прикручивается к готовой конструкции.
Что проверить до оплаты VPS
Эти четыре пункта решают судьбу почтового сервера. Проверять их после оплаты бессмысленно — деньги уже ушли:
- Исходящий порт 25 открыт. Многие провайдеры закрывают его молча, из антиспам-соображений. Узнаете об этом, когда письма перестанут уходить.
- В панели можно прописать PTR-запись (обратный DNS) на
mail.вашдомен. Без обратной записи крупные почтовики режут доставку. - IP чист по спам-листам. Проверить на mxtoolbox.com/blacklists.aspx — Spamhaus, Barracuda, SORBS. Провайдеры переиспользуют адреса, и вам может достаться чужая история.
- От 16 ГБ оперативной памяти. Mailcow один просит от 6, остальное съедят сайт, база и аналитика. ОС — Ubuntu 24.04 LTS.
Последний пункт я недооценивал, пока не увидел потребление в проде. Мониторинг памяти на такой машине — обязательная часть деплоя.
Письма пишутся раньше, чем появляется почта
Самое полезное решение в этой задаче принимается до Mailcow. Заявка с сайта падала только в базу — никто не знал о новом клиенте, пока не откроет кабинет. На живом сайте это прямые потери.
Я сделал общий слой отправки: письмо всегда пишется в таблицу outbox. И когда почты ещё нет, и когда она уже есть. Реальная отправка включается переменной окружения MAIL_ENABLED. До Mailcow письма просто копятся — ничего не теряется, и по таблице видно, что именно ушло бы клиенту.
Что это даёт:
- шаблоны и тексты пишутся параллельно с настройкой сервера, без ожидания;
- в день включения почты вы меняете одну переменную;
- есть журнал отправок для разбора «а письмо точно ушло?»;
- повторную отправку делать по существующей записи, без выдумывания логики заново.
Два письма, которые нужны сразу
Уведомление о заявке. Уходит на внутренний ящик в момент создания заявки. Внутри — контакт клиента, объект интереса, ссылка на карточку в кабинете. Одно письмо закрывает разрыв между «форма отправлена» и «менеджер узнал».
Подтверждение подписки. В базе у меня уже генерировался subscribers.token и никуда не использовался — подписчики лежали неподтверждёнными. Рассылать по такой базе нельзя: это прямая дорога в спам-листы, и восстанавливать репутацию домена потом долго.
Схема стандартная, double opt-in: человек оставляет адрес → получает письмо со ссылкой с токеном → переход по ссылке помечает подписку подтверждённой. Рассылка уходит только по подтверждённым. Токен разовый, с ограниченным сроком жизни.
Обе задачи — одна работа. Общий слой отправки пишется один раз, дальше добавляется шаблон.
DNS и проверка
После установки Mailcow настраиваются MX, SPF, DKIM, DMARC и автодискавери. DKIM-ключ Mailcow генерирует сам — его нужно скопировать в DNS-панель домена. PTR прописывается на стороне хостера.
Приёмка простая: письмо на mail-tester.com должно дать 10/10. Балл ниже означает, что какая-то из записей не подхватилась или не разошлась по DNS. Разбирайтесь до включения MAIL_ENABLED, иначе первые же письма клиентам уедут в спам и подпортят репутацию свежего домена.
После этого создаются ящики из списка клиента. У меня раздел «Ящики» в кабинете создаёт и удаляет их через Mailcow API — клиент заводит сотруднику почту сам, без обращения ко мне.
Чего я советую избегать
Брать VPS «на попробовать», не проверив 25-й порт и PTR. Переезжать почтой потом дороже, чем выбрать нормального провайдера сразу.
Включать отправку в тот же момент, когда закончили DNS. Дайте записям разойтись, отправьте тестовые письма на разные почтовики, посмотрите заголовки — проходит ли DKIM.
Отправлять письмо прямо из обработчика формы, минуя таблицу. Первый же таймаут SMTP превратится в ошибку на форме у клиента и потерянную заявку.
Вечер — реалистичный срок для установки и настройки. Полное доверие к домену набирается дольше: репутация растёт от объёма нормальной переписки. Начинайте с транзакционных писем, массовые рассылки подключайте позже.
Автоматизация для бизнеса
Вторая сторона исследования: собираю под бизнес ИИ-агентов и автоматизации, которые работают и с клиентами, и с командой. Система остаётся у вас в работе и под вашим управлением.