TGViewer
ServerAdmin.ru ServerAdmin.ru @srv_admin · 32.6K subscribers
Post #1976 8.18K
​​Делюсь с вами полезной находкой, которую развернул и протестировал сам. Речь пойдёт про почтовый сервер cuttlefish.io для отправки писем сайтами и приложениями. Случайно о нём узнал, когда искал какие-то современные веб клиенты для работы с почтовыми серверами. А то roundcube уже надоел, а sogo я не люблю. Надо что-то новое, удобное и современное.

Cuttlefish - почтовый сервер с веб интерфейсом, но заточен он на управление исходящими потоками. Думаю те, кто поддерживают сайты, знают, что работа с отправкой почты это отдельная головная боль. Важно следить за отправкой, за статусом отправленных писем. Очень желательно собирать статистику получателей, которые не принимают вашу почту, чтобы исключить их из рассылки. В общем, тут много нюансов.

Самый простой способ - использовать готовые сервисы для отправки. Но там тоже есть свои нюансы. Во-первых, это денег стоит, во-вторых, они начнут вас наказывать за отправку писем несуществующим ящикам, когда процент таких отправок будет расти до 10-15%, а может и раньше. За базой придётся следить, а это отнимает время и не всегда хочется подобным заниматься.

Так что собственный почтовый сервер имеет свои преимущества. Cuttlefish как раз заточен под такие задачи. Он умеет разделять потоки отправки по приложениям, сайтам. То есть можно один сервер использовать для разных проектов. В веб интерфейсе можно посмотреть все отправленные письма, прочитать их, отсортировать по статусам.

Всё это бесплатно, так как проект Open Source. Под капотом обычный Postfix. Есть API для интеграции. Тестовый сервер можно поднять в Docker через представленный docker-compose. В прод ставится через готовый плейбук ansible.

Я в прод не осилил установку, потому что надоело правки вносить. Каких-то особых проблем там нет, но нужно понимать ansible: поставить версию 2.8, там стоит проверка, на другой не запустится. Надо поправить имя пакета для python-minimal в одной из ролей, включить авторизацию по паролю для ssh, поменять имя хоста в инвентаре и т.д. Я всё это сделал, потом дошёл до роли с установкой newrelic infra и бросил это дело. Её надо убрать, или заполнить реквизиты доступа, если будете использовать.

В итоге для теста запустил всё через Docker. Там проблем никаких:
# git clone https://github.com/mlandauer/cuttlefish
# docker-compose run web bundle exec rake db:create db:schema:load
Обязательно ждём создания БД. Я в первый раз как-то упустил этот момент, база не создалась, приложение не стартовало.
# docker-compose run web bundle exec rake db:seed
# docker-compose up

Дальше идём в веб интерфейс на порт 3000, учётка для демо данных - joy@smart-unlimited.com / password. Чтобы всё корректно заработало, необходимо подготовить DNS записи как для обычного почтового сервера и не забыть про spf и ptr. Без этого тоже будет отправлять, но письма в спам улетят.

В рунете вообще не нашёл ни одного упоминания про этот почтовый сервер. Мне он показался полезным, поэтому заморочился и изучил его. Мне кажется, хороший инструмент для своей задачи.

Сайт - https://cuttlefish.io/
Исходники - https://github.com/mlandauer/cuttlefish

#mailserver
  • 👍 34
  • 👎 3
More from @srv_admin
  1. Sep 23, 2026Очередная подборка статей авторов, которые согласились в ней участвовать. Кто не понимает,…
  2. Sep 23, 2026Контейнеры в одном инструменте, виртуалки — в другом, частное облако — вообще отдельная ис…
  3. Sep 23, 2026Расскажу тем, кто не знает, и напомню тем, кто забыл, как я. Не надо в Proxmox в LXC конте…
  4. Sep 22, 2026Недавно случайно заметил любопытную информацию на тему Proxmox VE и новой функциональности…
  5. Sep 22, 2026✔️ Сети для всех — сообщество для тех, кто развивается в сетевом и системном администриров…
  6. Sep 22, 2026Я ранее уже рассказывал, что приобрёл себе домой полноценную серверную платформу на базе S…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →