Aller au contenu
shadgramers

Migration Mailcow depuis Microsoft 365 : guide technique complet

Comment migrer vos boîtes mail Exchange Online vers Mailcow en moins de 48h de downtime. IMAP migration, enregistrements DNS, SPF/DKIM/DMARC, pièges à éviter.

12 min de lecturePar l'équipe ShadGramers

## Pourquoi migrer vers Mailcow

Mailcow est la référence de la messagerie auto-hébergée open-source. Basé sur Postfix + Dovecot + SOGo + Rspamd, il gère l'ensemble de la stack email : IMAP/POP3, SMTP, filtre anti-spam, interface webmail, administration multi-domaines.

La migration depuis Exchange Online (Microsoft 365) est techniquement bien documentée et, avec une préparation soigneuse, peut s'effectuer sans interruption visible pour vos utilisateurs.


Ce que vous allez migrer

ÉlémentOutil de migrationComplexité
Boîtes mail (emails)imapsyncFaible
ContactsCardDAV exportFaible
CalendriersCalDAV exportModérée
Listes de distributionConfiguration manuelleModérée
Règles de messagerieRecréation manuelleVariable
Signatures d'entrepriseCopier/collerFaible
Archives PSTimapsync ou PST importÉlevée

Ce guide couvre la migration des boîtes mail (emails). Les contacts et calendriers sont couverts dans un article dédié.


Pré-requis

Infrastructure

  • Serveur Ubuntu 22.04 LTS ou Debian 12 — minimum 2 vCPUs, 4 Go RAM, 50 Go SSD
  • Accès SSH en root
  • IP fixe dédiée (pas d'IP partagée — essentiel pour la réputation email)
  • Ports 25, 80, 443, 465, 587, 993, 995 ouverts entrant

DNS (avant la migration)

Vérifiez que vous contrôlez bien votre zone DNS. Vous aurez besoin de modifier : - Enregistrement MX - Enregistrements SPF (TXT) - Enregistrements DKIM (TXT, généré par Mailcow) - Enregistrement DMARC (TXT)

Accès Microsoft 365

  • Compte administrateur global
  • Accès à l'Exchange Admin Center
  • Accès à l'outil PowerShell Exchange Online (pour l'export des boîtes)

Étape 1 : Installation de Mailcow

```bash # Sur votre nouveau serveur (Ubuntu 22.04) apt update && apt upgrade -y apt install -y git curl

Clone mailcow cd /opt git clone https://github.com/mailcow/mailcow-dockerized cd mailcow-dockerized

Configuration interactive ./generate_config.sh # → Renseignez votre FQDN (ex: mail.votredomaine.fr) # → Fuseau horaire : Europe/Paris ```

Après ./generate_config.sh, éditez mailcow.conf pour ajuster les variables d'environnement si nécessaire.

```bash # Démarrage docker compose pull docker compose up -d

Vérifier que tous les conteneurs sont up docker compose ps ```

L'interface d'administration est accessible sur https://mail.votredomaine.fr (port 443).

Identifiants par défaut : admin / moohooà changer immédiatement.


Étape 2 : Configuration DNS (semaine avant la bascule)

SPF

Remplacez votre SPF Microsoft par le SPF Mailcow :

"v=spf1 mx a:mail.votredomaine.fr -all"

Si vous avez d'autres sources légitimes (Stripe, Mailchimp en transit…) :

"v=spf1 mx a:mail.votredomaine.fr include:sendgrid.net -all"

DKIM

Dans l'interface Mailcow, allez dans Configuration > Domaines → cliquez sur l'icône DKIM de votre domaine → copiez la clé publique et créez l'enregistrement DNS TXT :

mail._domainkey.votredomaine.fr  TXT  "v=DKIM1; k=rsa; p=MIIBIjAN..."

DMARC

_dmarc.votredomaine.fr  TXT  "v=DMARC1; p=none; rua=mailto:dmarc@votredomaine.fr"

Commencez avec p=none (monitoring seulement). Passez à p=quarantine puis p=reject après avoir vérifié les rapports.

Important : ne basculez pas le MX avant que SPF/DKIM soient propagés et validés. Utilisez MXToolbox pour vérifier.


Étape 3 : Création des boîtes dans Mailcow

Avant de migrer les données, créez les boîtes de destination.

Via l'interface : Configuration > Boîtes aux lettres > Ajouter.

Via l'API Mailcow (pour automatiser sur beaucoup de boîtes) :

# Exemple : créer user@votredomaine.fr
curl -X POST "https://mail.votredomaine.fr/api/v1/add/mailbox" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: VOTRE_CLE_API" \
  -d '{
    "local_part": "user",
    "domain": "votredomaine.fr",
    "name": "Prénom Nom",
    "password": "MotDePaseTemporaire123!",
    "quota": "10240"
  }'

Scriptez la création en boucle depuis votre liste d'utilisateurs M365.


Étape 4 : Migration des emails avec imapsync

imapsync est l'outil de référence pour la migration IMAP. Il copie les emails dossier par dossier sans downtime.

Installation

```bash apt install -y libauthen-ntlm-perl libcrypt-ssleay-perl \ libdigest-hmac-perl libfile-copy-recursive-perl \ libio-compress-perl libio-socket-inet6-perl \ libio-socket-ssl-perl libio-tee-perl libhtml-parser-perl \ libjson-webtoken-perl libmail-imapclient-perl \ libparse-recdescent-perl libmodule-scandeps-perl \ libreadonly-perl libsys-meminfo-perl libterm-readkey-perl \ libunicode-string-perl liburi-perl libwww-perl make

wget https://raw.githubusercontent.com/imapsync/imapsync/master/imapsync chmod +x imapsync ```

Migration d'une boîte

./imapsync \
  --host1 outlook.office365.com \
  --user1 user@votredomaine.fr \
  --password1 "MotDePasseM365" \
  --ssl1 \
  --host2 mail.votredomaine.fr \
  --user2 user@votredomaine.fr \
  --password2 "MotDePaseTemporaire123!" \
  --ssl2 \
  --skipcrossduplicates \
  --useheader 'Message-ID' \
  --syncinternaldates \
  --logfile "logs/user_migration.log"

Script de migration en masse

```bash #!/bin/bash # migrate-all.sh — migre toutes les boîtes listées dans users.csv # Format CSV : email,password_m365,password_mailcow

while IFS=, read -r email pass_m365 pass_mailcow; do echo "[$(date)] Migrating $email..." ./imapsync \ --host1 outlook.office365.com --user1 "$email" --password1 "$pass_m365" --ssl1 \ --host2 mail.votredomaine.fr --user2 "$email" --password2 "$pass_mailcow" --ssl2 \ --skipcrossduplicates --useheader 'Message-ID' --syncinternaldates \ --logfile "logs/${email//[@.]/_}.log" & done < users.csv

wait echo "Migration terminée." ```

Conseil : la migration peut prendre plusieurs heures pour les grosses boîtes. Lancez-la la nuit précédant la bascule. Effectuez une passe finale le jour J avant de changer le MX.


Étape 5 : Bascule DNS (jour J)

Le moment critique. Réduisez d'abord le TTL de votre enregistrement MX à 300 secondes (5 minutes) 48h avant la bascule.

Puis, le jour J :

``` # Supprimez l'enregistrement MX Microsoft : # votredomaine.fr MX 10 votredomaine-fr.mail.protection.outlook.com

Ajoutez l'enregistrement MX Mailcow : votredomaine.fr MX 10 mail.votredomaine.fr ```

Dès que la propagation est effective (vérifiez avec dig MX votredomaine.fr @8.8.8.8), les nouveaux emails arrivent sur Mailcow.

Simultanément : lancez une dernière passe imapsync pour capturer les emails reçus pendant la migration :

./imapsync [mêmes paramètres] --delete2 false

Étape 6 : Configuration des clients email

Paramètres IMAP (Thunderbird, Outlook, mobile)

``` Serveur IMAP : mail.votredomaine.fr Port : 993 (SSL/TLS) Authentification : mot de passe normal

Serveur SMTP : mail.votredomaine.fr Port : 587 (STARTTLS) Authentification : mot de passe normal ```

Webmail

SOGo est disponible sur https://mail.votredomaine.fr/SOGo. Interface professionnelle avec calendriers, contacts et gestion des salles de réunion intégrée.


Étape 7 : Validation et monitoring post-migration

Tests à effectuer dans les 48h

```bash # Test d'envoi sortant (depuis un serveur externe) telnet mail.votredomaine.fr 25

Test de réception (depuis Gmail/Proton) echo "Test migration" | mail -s "Test" user@votredomaine.fr

Vérification DMARC reports (après 24-48h) cat /var/mailcow-data/dmarc-reports/*.xml | grep -E "pass|fail" ```

Métriques à surveiller

  • Queue Postfix : docker exec -it $(docker ps -qf "name=postfix") mailq
  • Logs Rspamd (anti-spam) : interface web sur port 11334 (accessible depuis admin Mailcow)
  • Score DMARC sur MXToolbox

Erreurs fréquentes et solutions

Le MX pointe bien sur Mailcow mais les emails rebondissent → Vérifiez que le domaine est bien créé dans l'interface Mailcow (Configuration > Domaines)

SPF "fail" sur les emails sortants → L'IP de votre serveur mail doit figurer dans l'enregistrement SPF. Vérifiez avec dig TXT votredomaine.fr

Les emails partent dans les spams des destinataires → Vérifiez le score DKIM (doit être "pass"), la réputation de votre IP (utilisez Spamhaus, Barracuda), et activez DMARC reporting

imapsync s'arrête sur des erreurs de certificat M365 → Ajoutez --tls1 et --ssl1 et vérifiez la date système de votre serveur de migration


Résumé des délais

PhaseDuréeDowntime
Installation Mailcow2-4h0
Configuration DNS1h0
Propagation SPF/DKIM24-48h0
Migration imapsync initiale2-24h0
Bascule MX5-15 min< 5 min
Passe finale imapsync1-2h0
Total perçu par les utilisateurs< 5 min

Vous voulez qu'on gère la migration pour vous ? Contactez-nous — nous proposons des migrations clé-en-main avec garantie de service.

Cet article vous a été utile ?

Recevez nos prochains guides et analyses directement dans votre boîte mail.