Un runbook de lot, valable pour n'importe quel fournisseur
Un client change d'hébergeur, ou vous reprenez un parc : les boîtes doivent suivre sans que personne ne perde un message pendant la propagation DNS. Ce guide ne suppose que deux choses : un accès IMAP aux deux serveurs et la main sur la zone DNS du domaine. Il ne dépend ni d'un panneau ni d'une marque.
La difficulté n'est pas de copier un message, c'est de ne rien oublier autour : la boîte que personne n'a listée, la redirection qui n'existe que dans l'ancien panneau, le quota trop juste sur la cible, le courrier qui continue d'arriver à l'ancienne adresse parce qu'un résolveur garde l'ancien MX en cache. D'où une méthode en lot : on inventorie, on prépare un fichier unique, on synchronise deux fois, on compte.
Les départs depuis Gmail ou Microsoft 365, et depuis AWS WorkMail vers un serveur Mailcow, ont leurs propres guides (« Migrer son e-mail pro : quitter Gmail et Microsoft 365 » et « AWS WorkMail ferme : migrez vers Mailcow sur VPS »). Ici, on traite le cas général d'un parc de clients.
L'inventaire avant de toucher quoi que ce soit
Une migration par IMAP déplace des messages et des dossiers. Rien d'autre. Tout ce qui vit à côté, dans l'ancien panneau, doit être listé avant le premier transfert, sinon il disparaît sans bruit à la coupure.
Demandez l'export des comptes à l'ancien fournisseur, ou relevez-les dans son interface, et consolidez-les dans un tableau par domaine. Ajoutez une colonne « utilisation réelle » : une boîte de 40 Go annoncée à 5 Go d'usage change le temps de copie et le quota à prévoir sur la cible. Ajoutez une colonne « dernier accès » : une boîte qui n'a pas été ouverte depuis un an est soit un compte fantôme à archiver, soit une adresse de formulaire qui reçoit encore des demandes. La question se pose au client, pas à vous.
Le tableau doit être validé par le client avant d'aller plus loin. C'est la seule protection contre la boîte oubliée.
Ce que l'inventaire doit contenir, boîte par boîte
- Boîtes et quotas — adresse, quota alloué, espace réellement occupé, nombre de dossiers, pour dimensionner la cible.
- Alias et redirections — chaque alias, chaque transfert vers une adresse externe, chaque adresse « attrape-tout » : IMAP ne les transporte pas, il faut les recréer à la main.
- Répondeurs et filtres — réponses automatiques, règles de tri côté serveur, listes de blocage : à recréer ou à exporter si le panneau le permet.
- Appareils et clients de messagerie — téléphones, Outlook, Thunderbird, scanners et imprimantes qui envoient par SMTP : chacun devra pointer vers le nouveau serveur.
- Identifiants — un mot de passe par boîte, ou un mot de passe d'application si l'authentification à deux facteurs est active côté source.
- Contacts et calendriers — hors du périmètre IMAP : à exporter séparément et à dire explicitement au client.
Le calendrier des TTL, avant la bascule MX
Le TTL (durée de vie) d'un enregistrement DNS dit combien de temps un résolveur peut le garder en cache. Si le MX est à 86 400 secondes, un expéditeur peut continuer à livrer à l'ancien serveur pendant vingt-quatre heures après votre changement. Abaisser le TTL ne sert qu'à condition de le faire assez tôt : la baisse elle-même doit avoir expiré dans les caches avant la bascule.
Règle pratique : relever le TTL actuel du MX, abaisser l'enregistrement à 300 secondes au moins une durée de l'ancien TTL avant la bascule (deux ou trois jours d'avance si vous ne le connaissez pas), puis ne rien changer d'autre. Le jour J, on modifie le MX, on lance la passe delta, et l'ancien serveur reste actif. Le TTL ne remonte qu'une fois la période de double lecture terminée.
Prévoyez aussi les enregistrements d'authentification : le SPF et la clé DKIM du nouveau fournisseur sont publiés avant la bascule, pas après. Leur définition est dans « SPF, DKIM, DMARC : passer le seuil des 5 000 e-mails ».
Calendrier type d'une bascule
Faites défiler le tableau
| Moment | Action | Pourquoi |
|---|---|---|
| J-7 | Inventaire validé par le client, boîtes créées sur la cible | Aucune boîte oubliée, quotas dimensionnés |
| J-3 | TTL du MX abaissé à 300 secondes | La baisse doit expirer dans les caches avant J |
| J-2 | Première passe imapsync, la masse du courrier | Le gros volume se copie hors urgence |
| J-1 | SPF et DKIM du nouveau fournisseur publiés | Les premiers messages sortants sont authentifiés |
| J | Bascule du MX puis passe delta | Récupère ce qui est arrivé depuis la première passe |
| J+1 à J+3 | Passes delta supplémentaires, double lecture | Résolveurs retardataires et courrier en file d'attente |
| J+7 | Vérification finale, TTL remonté, ancien service résilié | On ne coupe qu'après avoir compté |
Les identifiants ne doivent pas traîner
Un lot de boîtes, c'est une liste de mots de passe. Le piège habituel est de les coller dans une commande : ils restent dans l'historique du shell, et dans la liste des processus tant que la commande tourne. Préférez l'option --passfile1 d'imapsync, qui lit le mot de passe sur la première ligne d'un fichier, plutôt que --password1, que la documentation d'imapsync déconseille.
Travaillez dans un dossier temporaire créé avec umask 077, sur une machine que vous maîtrisez, jamais sur le poste partagé d'un collègue. Le fichier de lot est supprimé à la fin avec shred -u, et les mots de passe de la cible sont changés ensuite si le client les a communiqués par un canal qui n'est pas confidentiel. Un fichier de lot oublié dans un dossier synchronisé vers un cloud personnel est un incident, pas un détail.
Si une boîte source exige un mot de passe d'application, demandez-le au client explicitement : le mot de passe habituel sera refusé.
La synchronisation en deux passes, boîte par boîte puis en lot
Préparer le dossier de travail
umask 077 && mkdir lot-client && cd lot-clientpuismkdir logs. Rien de ce dossier ne doit partir dans un dépôt Git ni dans un dossier synchronisé.Écrire le fichier de lot
Un fichier
boites.csv, une ligne par boîte :utilisateur source;mot de passe source;utilisateur cible;mot de passe cible. Les hôtes sont fixés dans la commande, comme dans l'exemple de la documentation d'imapsync. Un mot de passe qui contient un point-virgule casse la ligne : choisissez un autre séparateur pour ce lot.Tester une seule boîte à blanc
imapsync --dry --host1 imap.ancien-fournisseur.com --user1 [email protected] --passfile1 p1 --host2 imap.nouveau-fournisseur.com --user2 [email protected] --passfile2 p2 --ssl1 --ssl2 --automapne copie rien et affiche ce qui serait fait.--automaprapproche les dossiers courants (Envoyés, Brouillons, Indésirables) dont le nom diffère d'un serveur à l'autre.Relever les tailles de dossiers
Ajoutez
--justfoldersizesà la même commande : imapsync affiche les tailles initiales des deux côtés et s'arrête. Gardez cette sortie, c'est la base du comptage final.Lancer la première passe sur cette boîte
Retirez
--dryet--justfoldersizes, ajoutez--logfile logs/contact.txt. Une relance ne retransfère pas ce qui est déjà présent, et rien n'est supprimé côté cible par défaut : n'ajoutez pas--delete2avant la fin du projet.Dérouler le lot
while IFS=';' read -r u1 p1 u2 p2; do printf '%s' "$p1" > p1; printf '%s' "$p2" > p2; imapsync --host1 imap.ancien-fournisseur.com --user1 "$u1" --passfile1 p1 --host2 imap.nouveau-fournisseur.com --user2 "$u2" --passfile2 p2 --ssl1 --ssl2 --automap --logfile "logs/$u1.txt"; echo "$u1;$?" >> resultats.csv; done < boites.csvLire le code de sortie de chaque boîte
grep -v ';0$' resultats.csvliste les boîtes qui ne sont pas à zéro. Les codes utiles sont 16, 161 et 162 (authentification), 113 (quota dépassé côté cible) et 101 ou 102 (connexion impossible à l'un des deux hôtes).Basculer le MX puis rejouer le même lot
Après le changement de MX, relancez exactement la même boucle : c'est la passe delta. Elle ne copie que les messages arrivés depuis la première passe. Rejouez-la à J+1 et J+3, puis
shred -u boites.csv p1 p2.
Vérifier l'arrivée plutôt que la croire
Une synchronisation « terminée » n'est pas une preuve. Ce qui est vérifié, c'est un comptage : relancez --justfoldersizes sur chaque boîte, côté source et côté cible, et comparez dossier par dossier le nombre de messages et la taille. Un écart doit s'expliquer ligne par ligne (corbeille volontairement exclue, doublons fusionnés, dossier non abonné), pas s'arrondir. On ne dit pas « sans perte » ; on dit « comptage concordant sur chaque dossier, écarts expliqués ».
Puis le test de bout en bout : envoyez un message depuis une adresse externe vers chaque boîte migrée et vérifiez qu'il arrive sur le nouveau serveur ; répondez depuis le webmail de la cible et vérifiez la réception chez un destinataire externe. Dans l'en-tête du message reçu, contrôlez que SPF, DKIM et DMARC sont à pass. Enfin, ouvrez réellement une boîte par domaine dans un client de messagerie configuré à neuf : c'est ce qui révèle un dossier non abonné ou un mot de passe mal transmis.
Dépannage : les erreurs qui reviennent en lot
AUTHENTICATIONFAILEDet code de sortie 161 ou 162 — mauvais mot de passe, mot de passe d'application requis, ou IMAP désactivé pour ce compte. Le 161 désigne la source, le 162 la cible : vérifiez d'abord la bonne moitié.- Code 113,
OVERQUOTA— la boîte cible est trop petite. Relevez le quota sur la cible à partir de l'inventaire avant de relancer, sans quoi la passe delta échouera au même endroit. - Code 101 ou 102 — hôte injoignable : pare-feu, mauvais port, limite de connexions simultanées du fournisseur source. Lancez le lot boîte par boîte, pas en parallèle, et espacez les essais.
- Dossiers en double ou mal nommés — les séparateurs de hiérarchie diffèrent (point d'un côté, barre oblique de l'autre). Relancez le test
--dry --justfolderset ajustez--automapavant de copier. - Messages présents deux fois — l'identification se fait par en-têtes. Si un client signale des doublons, relisez l'option
--useheader "Message-Id"dans la documentation d'imapsync avant de relancer.
Ne coupez pas l'ancien service le jour de la bascule
Gardez les boîtes d'origine actives au moins une semaine après le changement de MX et demandez au client de consulter les deux pendant ce temps. Un expéditeur dont le résolveur a gardé l'ancien MX, ou dont le serveur réessaie une livraison différée, déposera encore du courrier à l'ancienne adresse ; la passe delta le ramène, mais seulement si le compte existe toujours. Ne remontez le TTL et ne résiliez l'ancien service qu'une fois la dernière passe delta sans nouveau message.
Accueillir les boîtes : ce que l'hébergement web couvre, et ce qu'il ne couvre pas
L'hébergement web cPanel de ServOrbit inclut des e-mails professionnels : vous créez les boîtes dans cPanel, fixez leur quota, et le client accède à son webmail ; le guide « Créer une adresse e-mail professionnelle dans cPanel » détaille le geste. Le nombre de boîtes dépend de l'offre choisie, à lire sur la page de l'offre au moment de dimensionner le lot.
Il faut en revanche être précis sur le périmètre. L'assistant de migration de portefeuille de ServOrbit, décrit dans « ServOrbit : migrez tout votre portefeuille en une seule commande », couvre les domaines et les comptes d'hébergement cPanel. Il ne déplace pas les boîtes IMAP d'un fournisseur tiers. La migration assistée existe comme option : à demander et à confirmer avant de promettre une date au client, jamais à supposer incluse.
Une fois les boîtes arrivées, la configuration des appareils suit le guide « Configurer son e-mail pro sur téléphone ou Outlook ».
Ce que vous remettez au client à la fin
Une migration se clôt par un document, pas par un « c'est fait ». Remettez au client le tableau d'inventaire annoté (boîte, statut, écarts de comptage expliqués), la liste des alias, redirections et répondeurs recréés, la liste des appareils reconfigurés, et la date à laquelle l'ancien service sera résilié. Joignez les sorties de comptage avant et après : en cas de réclamation trois semaines plus tard, c'est ce qui permet de répondre avec des chiffres.
Notez aussi ce qui n'était pas couvert : contacts, calendriers, règles de tri non recréées. Une routine qui rend « OK » ne dit que ce qu'elle regarde. Et programmez un contrôle dix jours plus tard : une boîte rarement consultée n'aura signalé son problème qu'à ce moment-là.