Fonctionnalités
Ce que mccb fait de vos boîtes aux lettres
Une image, deux services : web (tableau de bord et API, port 22362) et worker (file de tâches). L'état tient dans SQLite et des fichiers dans ./data.
Sources et cibles
- Sources
Fichiers PST et OST, Exchange sur site (EWS), Microsoft 365 (Graph), Google Workspace, IMAP, JMAP, CalDAV et CardDAV, et fichiers : mbox, Maildir, EML, MSG, ICS et VCF.
- Cibles
IMAP, CalDAV, CardDAV, JMAP et Exchange (EWS ou Graph). Toutes les sources ne sont pas aussi des cibles : Google, PST et les fichiers sont des sources en lecture seule.
- E-mails, agendas, contacts et tâches
Les tâches vont là où la cible peut les accueillir : Exchange, ou un agenda CalDAV qui accepte
VTODO. - Un seul identifiant pour de nombreuses boîtes
L'usurpation d'identité Exchange, Graph en mode application seule et un utilisateur maître IMAP atteignent chaque boîte avec un seul compte de votre côté.
- Le plus récent d'abord
Les e-mails sont importés du plus récent au plus ancien, tous dossiers confondus.
- De serveur à serveur
Aucun fichier nécessaire : IMAP vers IMAP, ou Exchange, Microsoft 365 et Google vers n'importe quel serveur IMAP, pendant que les gens continuent de travailler.
- Règles de messagerie
Les règles de boîte de réception Exchange sont converties en Sieve au mieux, puis envoyées par ManageSieve ou proposées sous forme de script.
L'interface
- Quatre endroits
Migrations, Fichiers, Serveurs et Réglages, dans une barre latérale sur ordinateur et une barre du haut sur téléphone. Neuf langues.
- Les serveurs d'abord
Choisissez le fournisseur (Gmail, Microsoft 365, iCloud, Fastmail, Infomaniak ou n'importe quel serveur IMAP) et le formulaire se remplit tout seul, avec ce que le fournisseur demande. Chaque serveur indique s'il est vérifié.
- Un formulaire par migration
De : un fichier ou un serveur en ligne, configuré et testé sur place. Vers : le serveur et la boîte.
- Un panneau qui dit ce qui vient ensuite
Chaque boîte affiche sa source, sa destination et ce qu'il faut copier, marquée prête ou non, avec un bouton de démarrage qui indique ce qui manque.
- L'état en toutes lettres
Chaque état est une icône et un mot, jamais une couleur seule. Ce qui demande votre action vient en premier dans la liste.
Amener les fichiers
- File d'envoi
Un fichier à la fois par défaut, dans l'ordre de votre choix. Réordonnez, mettez en pause, reprenez ou annulez.
- Envois avec reprise
Les gros fichiers sont envoyés par morceaux, chacun vérifié en SHA-256. L'espace libre est vérifié d'abord.
- Dossier de dépôt
Copiez des fichiers dans un dossier du serveur avec rsync ou un montage, et le worker les prend en charge.
- Récupération côté serveur
Le serveur télécharge lui-même le fichier en HTTP(S), SFTP ou depuis un service compatible S3.
- Aperçu
Voyez les accents et les pièces jointes avant toute écriture.
Planifier et contrôler
- Essai à blanc
Se connecte, liste et compte, et n'écrit rien sur aucune cible. Il prévient en cas de quota insuffisant ou de messages trop gros.
- Correspondance des dossiers et filtres
Associez des dossiers, excluez des dossiers, et filtrez par date ou par taille maximale, par serveur ou par boîte.
- Horaires et bande passante
Plages horaires autorisées et limite de bande passante par serveur.
- Lots
Des lots nommés, avec des actions groupées et un ordre de file.
- Resynchronisation finale et comparaison
Un dernier passage pour les nouveaux messages IMAP au moment de la bascule, et une comparaison source et cible en CSV et dans le rapport.
Conçu pour les lots
- Boîtes par CSV
Ajoutez les boîtes une par une, ou par CSV (
email;password[;login]). L'export ne contient jamais de mot de passe. - Ligne de commande et jetons d'API
La commande
mccbenvoie avec reprise, lance les migrations et les suit, sans navigateur. - Notifications
Vous préviennent quand les envois, analyses et migrations se terminent, par ntfy, webhook ou e-mail.
- Rapports
Progression en direct, journal et rapport JSON par boîte.
Interruptions sans risque
- Reprendre sans doublons
Pause, arrêt, plantage ou redémarrage : une reprise interroge le serveur et ne duplique jamais un message.
- Des plantages contenus
Chaque tâche et chaque analyse de PST tourne dans son propre sous-processus : un plantage de la bibliothèque PST native ne peut pas faire tomber le worker.
- Contrôles
Après la phase des e-mails, le nombre de messages de chaque dossier est comparé à ce qui a été envoyé, et un échantillon de messages est relu et comparé par empreinte. Sur une cible Exchange, seul le nombre est vérifié.
L'exploitation
- Réglage
Réglage automatique ou manuel des constructeurs de messages et des connexions IMAP, par serveur.
- Mots de passe des boîtes
Stockés chiffrés. L'application peut les déchiffrer : protégez donc
./dataet laSECRET_KEY. - Sauvegarde
Tout est dans
./data, y comprissecret.key: sans lui, les mots de passe de boîtes enregistrés ne peuvent plus être déchiffrés.
Ce qu'il ne fait pas
- Avoir tourné sur un vrai Exchange ou Google, pour l'instant
Les connecteurs Exchange, Microsoft 365 et Google n'ont été testés que contre des serveurs simulés. Essayez d'abord une boîte avec peu d'éléments.
- Conserver la date de réception sur Microsoft 365
Un e-mail écrit via Graph reçoit la date de l'import. IMAP avec OAuth2 comme cible la conserve.
- Écrire les participants discrètement sur Microsoft 365
Graph envoie un e-mail à chaque participant d'un événement qu'il crée. Par défaut, les participants sont écrits en texte dans le corps de l'événement. Les organisateurs et les réponses ne sont pas conservés sur une cible Exchange.
- Migrer les boîtes d'archive via Graph
Les archives Microsoft 365 ne sont pas accessibles. Déplacez d'abord leur contenu dans la boîte principale.
- Agendas JMAP
Non implémenté. Utilisez CalDAV pour les agendas d'un fournisseur JMAP.
- Tout copier
Les pièces jointes des événements et les photos de contacts ne sont pas copiées. Les corps des événements, contacts et tâches sont en texte brut.
- Rester synchronisé
Une migration copie dans un seul sens. Une dernière resynchronisation, lancée à la main, ajoute ce qui est arrivé depuis, mais une modification ou une suppression faite à la source après sa copie n'est pas reportée.
- Lire tous les fichiers
Un Maildir ou un dossier de messages doit être zippé. Un
.msgest converti au mieux, sans les corps en RTF seul, les messages intégrés ni les objets OLE. - Plusieurs administrateurs
Un seul administrateur : un mot de passe partagé, ni comptes ni rôles. Les jetons d'API n'expirent pas, révoquez-les à la main.
- Plusieurs hôtes
SQLite sur un disque local : un seul hôte, pas de haute disponibilité, pas de NFS.
- Les PST chiffrés
Les PST chiffrés ou protégés par mot de passe n'ont aucun traitement dédié. Ils donnent des erreurs ou sont marqués invalides. Ne comptez pas dessus.
- Résister à tous les PST corrompus
Un PST corrompu peut faire planter libpff. Les éléments touchés sont ignorés et signalés, et au-delà de
MAX_CHILD_CRASHESplantages, la tâche échoue. - Garantir l'envoi des notifications
L'envoi se fait au mieux : trois essais, puis le message est abandonné. Un sujet ntfy public peut être lu par quiconque en connaît le nom.
- HTTPS
Le port 22362 parle en HTTP simple. Placez mccb derrière un reverse proxy et n'exposez pas ce port directement.
- D'autres architectures
L'image publiée est pour
linux/amd64uniquement. - Tout décoder parfaitement
Les éléments sans information de jeu de caractères peuvent être mal décodés dans certaines langues.
- Compenser le serveur cible
Les résultats dépendent du serveur cible IMAP, DAV, JMAP ou Exchange.
Lancer mccb
Ouvrez http://<host>:22362 et connectez-vous avec le mot de passe affiché. Il n'apparaît qu'une fois. Les détails sont dans la documentation.
$ 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"