Marchi. Архиватор электронной почты на собственном сервере
Self-hosted сервис архивации почты с шифрованием, s3 репликацией и восстановлением.
Когда речь идёт о бэкапах, как правило, мы говорим о файлах, бд или системах целиком, но из виду упускается электронная почта, работа с которой, порой, полностью перекладывается на сторону провайдера.
Для закрытия этого важного упущения на GitHub появился проект Marchi - self-hosted сервис архивации электронной почты. Подключает IMAP-аккаунты, в фоне забирает письма по настраиваемым правилам, складывает локально (SQLite + Maildir), даёт полнотекстовый поиск, умеет реплицировать архив в S3 с шифрованием и восстанавливать письма обратно в ящик. Один бинарник на Go, без внешних зависимостей, Web UI на русском и английском.
⚠️ Сразу отмечаем, что проект довольно сырой - на момент публикации версия 0.1.2.
Установка
Среди поддерживаемых систем только Linux (amd64/arm64), запуск - через Docker или systemd. Самый быстрый путь:
1
2
3
git clone https://github.com/yurydemin/marchi.git
cd marchi
docker compose up
Сервис поднимается на https://localhost:8443 с самоподписанным TLS-сертификатом, на который, конечно, поругается браузер - принимаем и идём дальше. Данные живут в именованном volume marchi-data и переживают перезапуски.
Первый запуск
Вместо пары логин/пароль администратора - экран разблокировки с полем Master Key (минимум 12 символов), который нужно задать при первом входе.
Это не учётка, а ключ, из которого формируется ключ шифрования, которым будут зашифрованы пароли IMAP-аккаунтов, OAuth2-токены и S3-ключи. Забыли пароль - данные не восстановить никак, это не «сброс через email», поэтому в обязательном порядке запоминаем.
Особенность: после каждого рестарта контейнера сервис стартует заблокированным и ждёт ручной разблокировки. Пока заблокирован - синхронизация не идёт. Чтобы не вбивать ключ при каждой перезагрузке, предусмотрена переменная MARCHI_MASTER_KEY в .env.
Подключение почтового аккаунта
Раздел Аккаунты → «Добавить аккаунт»: email, IMAP-сервер, порт (993/SSL по умолчанию), логин, пароль. Для Gmail/Outlook с двухфакторкой - пароль приложения, либо OAuth2.
В строке добавленного аккаунта есть кнопка “Проверить” - сервис подключается и показывает либо число найденных папок, либо текст ошибки сервера как есть.
Дашборд и синхронизация
Дашборд (или Панель) - сводка по архиву (всего писем, активных аккаунтов, занято места локально и в s3) и таблица аккаунтов.
Автосинхронизация идёт по cron-расписанию (по умолчанию раз в 6 часов), рядом с аккаунтом есть кнопка «Синхронизировать» для ручного запуска. Синхронизация инкрементальная (по UID).
Правила архивации
Раздел Правила. Если правил нет - архивируется всё подряд. Если есть - проверяются сверху вниз, побеждает первое совпавшее.
❗️ Действия на выбор: архивировать, пропустить, архивировать и удалить с сервера, архивировать и отметить прочитанным. Последние два - это уже жизненный цикл почты, но стоит быть аккуратным, особенно с “архивировать и удалить”, на боевом почтовом адресе проверять бы не стал без предварительной проверки.
Поиск по архиву
Раздел Архив: слева дерево «аккаунт → папки», сверху поиск — полнотекстовый индекс по теме, телу, отправителю и вложениям, с фильтрами по дате/аккаунту/папке и сортировкой по релевантности или дате. Клики по письму открывает его просмотр - заголовок, тело, подчищенный HTML, вложения.
Восстановление
Отмечаем письма чекбоксами (или берём все результаты поиска), выбираем целевой аккаунт и папку, жмём «Восстановить выбранное». Технически это IMAP APPEND в целевую папку с автоматическим фолбэком на SMTP, если сервер команду не поддерживает.
Настройки
Раздел Настройки: смена Master Key, подключение S3 (эндпоинт, регион, бакет, ключи; path-style для MinIO и self-hosted; read-only «Проверить подключение»), OAuth2-приложения, retention по умолчанию и пересборка поискового индекса.
Retention представляет из себя трёхуровневый жизненный цикл письма: локально → перенос в S3 → окончательное удаление, с порогами в днях глобально и на уровне аккаунта.
S3-репликация шифрует каждый объект на клиенте (AES-256-GCM) до загрузки - провайдер хранилища видит только шифротекст. Локально потестировать можно без облака: docker compose --profile s3 up поднимает MinIO, консоль на http://localhost:9001.
Выводы
Инструмент уже в первых своих версиях предоставил полный цикл работы с письмами - архивация, поиск, репликация, retention, восстановление, экспорт, а также CLI интерфейс и Prometheus метрики.
Держим в голове, что проект совсем недавно появился, много нюансов еще не было учтено и протестировано, а потому рекомендовать как единственное решение в арсенале для бэкапа почты еще слишком рано, но поставить, поэкспериментировать и следить за развитием определённо стоит.








