Возможности
Что mccb делает с вашими ящиками
Один образ, два сервиса: web (панель и API, порт 22362) и worker (очередь заданий). Состояние хранится в SQLite и файлах в ./data.
Источники и цели
- Источники
Файлы PST и OST, локальный Exchange (EWS), Microsoft 365 (Graph), Google Workspace, IMAP, JMAP, CalDAV и CardDAV, а также файлы: mbox, Maildir, EML, MSG, ICS и VCF.
- Цели
IMAP, CalDAV, CardDAV, JMAP и Exchange (EWS или Graph). Не каждый источник можно использовать и как цель: Google, PST и файлы доступны только как источники для чтения.
- Почта, календари, контакты и задачи
Задачи попадают туда, где цель может их хранить: в Exchange или в календарь CalDAV, принимающий
VTODO. - Одни учётные данные для многих ящиков
Имперсонация Exchange, Graph app-only и мастер-пользователь IMAP дают доступ ко всем ящикам с одной вашей учётной записью.
- Сначала новые
Почта импортируется от новых к старым, по всем папкам.
- От сервера к серверу
Файл не нужен: IMAP в IMAP либо Exchange, Microsoft 365 и Google в любой сервер IMAP, пока люди продолжают работать.
- Почтовые правила
Правила входящих Exchange по возможности преобразуются в Sieve и загружаются по ManageSieve или предлагаются в виде скрипта.
Интерфейс
- Четыре места
Migrations, Files, Servers и Settings: боковая панель на компьютере и верхняя на телефоне. Девять языков.
- Сначала серверы
Выберите провайдера (Gmail, Microsoft 365, iCloud, Fastmail, Infomaniak или любой сервер IMAP), и форма заполнится сама, с тем, что требует провайдер. Для каждого сервера видно, проверен ли он.
- Одна форма на миграцию
Откуда: файл или работающий сервер, настроенный и проверенный на месте. Куда: сервер и ящик.
- Панель, которая подсказывает, что дальше
Для каждого ящика показаны источник, назначение и что копировать, с пометкой «готов» или «не готов», и кнопка запуска, которая сообщает, чего не хватает.
- Состояние словами
Каждое состояние обозначено значком и словом, а не только цветом. То, что требует вашего внимания, стоит в списке первым.
Загрузка файлов
- Очередь загрузки
По умолчанию по одному файлу за раз, в выбранном вами порядке. Меняйте порядок, приостанавливайте, возобновляйте или отменяйте.
- Возобновляемая загрузка
Большие файлы загружаются частями, каждая проверяется по SHA-256. Свободное место проверяется заранее.
- Папка загрузки
Скопируйте файлы в папку сервера через rsync или смонтированный том, и worker их подхватит.
- Загрузка на стороне сервера
Сервер сам скачивает файл по HTTP(S), SFTP или из S3-совместимого сервиса.
- Предпросмотр
Посмотрите акценты и вложения до любой записи.
Планирование и управление
- Пробный запуск
Подключается, перечисляет и считает, ничего не записывая в цели. Предупреждает о квоте и слишком больших письмах.
- Сопоставление папок и фильтры
Сопоставляйте папки, исключайте папки и фильтруйте по дате или максимальному размеру для сервера или отдельного ящика.
- Часы и пропускная способность
Разрешённые часы и ограничение пропускной способности для каждого сервера.
- Партии
Именованные партии с групповыми действиями и порядком очереди.
- Финальная повторная синхронизация и сравнение
Последний проход за новыми письмами IMAP при переключении и сравнение источника и цели в виде CSV и в отчёте.
Рассчитано на партии
- Ящики через CSV
Добавляйте ящики по одному или через CSV (
email;password[;login]). Экспорт никогда не содержит пароль. - Командная строка и API-токены
Команда
mccbзагружает с возобновлением, запускает миграции и следит за ними, без браузера. - Уведомления
Уведомляйте о завершении загрузок, анализов и миграций через ntfy, webhook или e-mail.
- Отчёты
Ход выполнения, журнал и отчёт JSON для каждого ящика в реальном времени.
Можно безопасно прервать
- Возобновление без дубликатов
Пауза, остановка, сбой или перезапуск: возобновление проверяет сервер и никогда не дублирует письма.
- Сбои остаются изолированными
Каждое задание и каждый анализ PST выполняются в отдельном подпроцессе, поэтому сбой нативной библиотеки PST не может остановить worker.
- Проверки
После этапа почты число писем в каждой папке сравнивается с отправленным, а выборка писем считывается обратно и сравнивается по хешу. Для целей Exchange письма только подсчитываются.
Эксплуатация
- Настройка
Автоматическая или ручная настройка сборщиков писем и соединений IMAP для каждого сервера.
- Пароли ящиков
Хранятся в зашифрованном виде. Приложение может их расшифровать, поэтому защитите
./dataиSECRET_KEY. - Резервное копирование
Всё хранится в
./data, включаяsecret.key: без него сохранённые пароли ящиков не расшифровать.
Чего он не делает
- Запуск на реальном Exchange или Google пока не выполнялся
Коннекторы Exchange, Microsoft 365 и Google проверены только на имитированных серверах. Сначала попробуйте один ящик с небольшим числом элементов.
- Сохранять дату получения в Microsoft 365
Письмам, записанным через Graph, ставится дата импорта. IMAP с OAuth2 в качестве цели её сохраняет.
- Тихо записывать участников в Microsoft 365
Graph рассылает письма всем участникам создаваемого им события. По умолчанию участники записываются текстом в тело события. Организаторы и ответы в цели Exchange не сохраняются.
- Миграция архивных ящиков через Graph
Архивы Microsoft 365 недоступны. Сначала перенесите их содержимое в основной ящик.
- Календари JMAP
Не реализовано. Для календарей провайдера JMAP используйте CalDAV.
- Копировать всё
Вложения событий и фотографии контактов не копируются. Тела событий, контактов и задач передаются простым текстом.
- Оставайтесь синхронизированными
Миграция копирует в одну сторону. Финальная повторная синхронизация, запущенная вручную, добавляет то, что пришло с тех пор, но изменение или удаление в источнике после копирования не переносится.
- Читайте каждый файл
Maildir или папку с письмами нужно упаковать в zip. Файл
.msgконвертируется по возможности: тела только в RTF, вложенные письма и объекты OLE не поддерживаются. - Несколько администраторов
Один администратор: общий пароль, без учётных записей и ролей. API-токены не истекают, отзывайте их вручную.
- Несколько хостов
SQLite на локальном диске: один хост, без высокой доступности, без NFS.
- Зашифрованные PST
Для зашифрованных или защищённых паролем PST специальной обработки нет. Они выдают ошибки или помечаются как недействительные. Не рассчитывайте на это.
- Переживите любой повреждённый PST
Повреждённый PST может обрушить libpff. Затронутые элементы пропускаются и попадают в отчёт, а при превышении
MAX_CHILD_CRASHESсбоев задание завершается ошибкой. - Гарантированная доставка уведомлений
Доставка уведомлений выполняется по возможности: три попытки, затем сообщение отбрасывается. Публичную тему ntfy может прочитать любой, кто знает её имя.
- HTTPS
Порт 22362 работает по простому HTTP. Поставьте mccb за обратный прокси и не открывайте порт напрямую.
- Другие архитектуры
Опубликованный образ только для
linux/amd64. - Декодируйте всё идеально
У элементов без информации о кодировке в некоторых языках декодирование может быть неточным.
- Компенсация особенностей целевого сервера
Результат зависит от целевого сервера IMAP, DAV, JMAP или Exchange.
Запустите mccb
Откройте http:// и войдите с выведенным паролем. Он показывается один раз. Подробности в документации.
$ mkdir mccb && cd mccb
$ curl -fsSLO https://raw.githubusercontent.com/selfhostr/mccb/main/docker-compose.yml
$ docker compose up -d
$ docker compose logs web | grep -A2 "Admin password"