## 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ément | Outil de migration | Complexité |
|---|---|---|
| Boîtes mail (emails) | imapsync | Faible |
| Contacts | CardDAV export | Faible |
| Calendriers | CalDAV export | Modérée |
| Listes de distribution | Configuration manuelle | Modérée |
| Règles de messagerie | Recréation manuelle | Variable |
| Signatures d'entreprise | Copier/coller | Faible |
| Archives PST | imapsync 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
| Phase | Durée | Downtime |
|---|---|---|
| Installation Mailcow | 2-4h | 0 |
| Configuration DNS | 1h | 0 |
| Propagation SPF/DKIM | 24-48h | 0 |
| Migration imapsync initiale | 2-24h | 0 |
| Bascule MX | 5-15 min | < 5 min |
| Passe finale imapsync | 1-2h | 0 |
| 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.