Nos boîtes email débordent. Gmail offre 15 Go partagés entre tous ses services, les hébergeurs professionnels facturent l’archivage au prix fort, et en cas de piratage ou de fermeture du fournisseur, des années de correspondance disparaissent d’un coup.

Mail-Archiver règle ce problème. C’est une application web open source qui se connecte à vos comptes email, archive automatiquement tous les messages avec leurs pièces jointes, et vous offre une interface web pour les consulter, les rechercher et les exporter. Le tout tourne sur votre propre serveur via Docker, en deux conteneurs. Le projet est hébergé sur GitHub, sous licence GPL-3.0. Il cumule plus de 1 600 étoiles, 38 releases et 8 contributeurs actifs.

LIRE AUSSI : OnlyOffice : Guide Complet de la Suite Bureautique Open Source

Ce que fait Mail-Archiver

Mail-Archiver se connecte à vos comptes email via IMAP (Gmail, Outlook, Yahoo, OVH, Infomaniak tout ce qui supporte IMAP) ou via l’API Microsoft Graph pour les comptes Microsoft 365. Un service d’arrière-plan synchronise automatiquement les nouveaux emails, y compris les pièces jointes, et les stocke dans une base PostgreSQL.

L’interface web, construite avec Bootstrap 5, permet de consulter les emails archivés comme dans un webmail classique : navigation par dossier, prévisualisation des messages, recherche plein texte avec filtres (date, expéditeur, sujet, pièces jointes). Un dashboard affiche les statistiques d’archivage avec des graphiques Chart.js : volume d’emails, espace utilisé, top expéditeurs.

Côté gestion, Mail-Archiver propose l’export en formats .mbox et .EML zippé (comptes entiers ou sélection), l’import d’archives existantes, et la restauration d’emails vers une boîte mail cible. Les politiques de rétention permettent de supprimer automatiquement du serveur mail les emails déjà archivés après une durée configurable votre boîte reste légère, mais rien n’est perdu. Le tout est multi-utilisateurs avec permissions par compte, authentification OIDC (Authentik, Keycloak, Authelia), et journalisation complète de toutes les actions.

Prérequis

Il vous faut Docker et Docker Compose installés sur votre machine. Côté matériel, 2 vCPU, 2 Go de RAM et 50 Go de SSD suffisent pour archiver plusieurs comptes et des dizaines de milliers d’emails. Mail-Archiver tourne sur n’importe quel système supportant Docker : VPS Linux, NAS Synology/QNAP, Raspberry Pi 4/5, ou PC local.

Installation avec Docker

Étape 1 Installer Docker (si ce n’est pas déjà fait)

Sur Ubuntu/Debian :

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl ca-certificates gnupg lsb-release

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Bash

Vérifiez avec docker --version et docker compose version.

Étape 2 Créer le projet

sudo mkdir -p /opt/mail-archiver && cd /opt/mail-archiver
Bash

Étape 3 Créer le docker-compose.yml

nano docker-compose.yml
Bash
services:
  # ============================================
  # Application Mail-Archiver
  # ============================================
  mailarchive-app:
    image: s1t5/mailarchiver:latest
    container_name: mail-archiver
    restart: always
    environment:
      # --- Connexion base de données (le mot de passe doit correspondre à POSTGRES_PASSWORD) ---
      - ConnectionStrings__DefaultConnection=Host=postgres;Database=MailArchiver;Username=mailuser;Password=caLaZvwyZa4Rkb3riHEOZxvx3bqifkTb
      # --- Identifiants admin ---
      - Authentication__Username=admin
      - Authentication__Password=1TotrROaUYx3blKd3r106S9rbdC7iIo3
      # --- Fuseau horaire (IANA) ---
      - TimeZone__DisplayTimeZoneId=Africa/Lome
    ports:
      - "5000:5000"
    networks:
      - mail-archiver-net
    volumes:
      - ./data-protection-keys:/app/DataProtection-Keys
    depends_on:
      postgres:
        condition: service_healthy

  # ============================================
  # Base de données PostgreSQL
  # ============================================
  postgres:
    image: postgres:17-alpine
    container_name: mail-archiver-db
    restart: always
    environment:
      POSTGRES_DB: MailArchiver
      POSTGRES_USER: mailuser
      # --- IMPORTANT : doit être identique au mot de passe dans ConnectionStrings ci-dessus ---
      POSTGRES_PASSWORD: caLaZvwyZa4Rkb3riHEOZxvx3bqifkTb
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
    networks:
      - mail-archiver-net
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready -U mailuser -d MailArchiver" ]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 10s

# ============================================
# Réseau
# ============================================
networks:
  mail-archiver-net:
    driver: bridge
YAML

Étape 4 Configurer les mots de passe

Deux points importants dans ce fichier :

Le mot de passe dans POSTGRES_PASSWORD et celui dans ConnectionStrings__DefaultConnection doivent être identiques c’est la même base de données. Générez un mot de passe solide avec openssl rand -base64 32 et remplacez VOTRE_MOT_DE_PASSE_DB aux deux endroits.

Les variables Authentication__Username et Authentication__Password définissent le compte admin pour se connecter à l’interface web. Choisissez un mot de passe différent de celui de la base. Le fuseau horaire TimeZone__DisplayTimeZoneId : Africa/Lome, Europe/Paris, America/New_York, etc.

Étape 5 Lancer

docker compose up -d
YAML

Vérifiez que tout tourne :

docker compose ps
YAML

Les deux conteneurs doivent être « Up » et PostgreSQL « (healthy) ». Si ce n’est pas le cas, consultez les logs avec docker compose logs -f.

Ouvrez votre navigateur sur http://VOTRE_IP:5000 et connectez-vous avec les identifiants admin définis à l’étape 4.

Ajouter un compte email

Dans l’interface, allez dans « Email Accounts »« New Account ».

Compte IMAP

Pour Gmail, vous devrez d’abord générer un mot de passe d’application : activez la vérification en deux étapes sur myaccount.google.com/security, puis créez un mot de passe d’application pour « Mail ». Activez aussi l’IMAP dans les paramètres Gmail (Transfert et POP/IMAP).

Renseignez ensuite dans Mail-Archiver : serveur imap.gmail.com, port 993, SSL activé, votre email complet comme identifiant, et le mot de passe d’application.

Voici les paramètres pour les fournisseurs les plus courants (tous utilisent SSL sur le port 993) :

FournisseurServeur IMAPPort
Gmailimap.gmail.com993
Outlook/Hotmailoutlook.office365.com993
Yahooimap.mail.yahoo.com993
OVHssl0.ovh.net993
Infomaniakmail.infomaniak.com993

Compte Microsoft 365

Pour les comptes M365 professionnels, Mail-Archiver passe par l’API Microsoft Graph plutôt que l’IMAP. Il faut créer une application dans Azure AD en suivant le guide officiel, récupérer le Client ID, Tenant ID et Client Secret, puis choisir le type « M365 » dans Mail-Archiver.

Une fois le compte ajouté, la synchronisation démarre automatiquement en arrière-plan.

Sécuriser l’accès avec HTTPS

Mail-Archiver tourne en HTTP sur le port 5000. Pour un accès depuis Internet, il faut placer un reverse proxy devant pour chiffrer les communications.

Avec Nginx Proxy Manager

Si vous utilisez Nginx Proxy Manager (ce qu’on recommande pour sa simplicité), ajoutez un nouveau Proxy Host depuis l’interface :

  1. Domain Names : mail-archive.votre-domaine.com
  2. Forward Hostname / IP : l’IP de votre serveur (ou mail-archiver si NPM tourne dans le même réseau Docker)
  3. Forward Port : 5000
  4. Onglet SSL : demandez un certificat Let’s Encrypt, cochez Force SSL et HTTP/2 Support

Votre Mail-Archiver sera accessible en HTTPS sans toucher à un fichier de configuration.

Avec Cloudflare Tunnel

Si vous préférez ne pas exposer de ports, Cloudflare Tunnel est l’alternative idéale. Ajoutez une route dans votre configuration cloudflared qui pointe votre domaine vers http://localhost:5000. Le tunnel se charge du SSL et de la protection DDoS.

Sauvegardes

Les données sont dans deux dossiers : ./postgres-data/ (base de données) et ./data-protection-keys/ (clés de chiffrement).

Sauvegarde de la base :

docker exec mail-archiver-db pg_dump -U mailuser MailArchiver > backup_$(date +%Y%m%d).sql
Bash

Sauvegarde complète :

tar -czf mail-archiver-backup_$(date +%Y%m%d).tar.gz ./postgres-data ./data-protection-keys ./docker-compose.yml
Bash

Pour automatiser, ajoutez une tâche cron quotidienne :

crontab -e
0 3 * * * cd /opt/mail-archiver && docker exec mail-archiver-db pg_dump -U mailuser MailArchiver > /opt/backups/mailarchiver_$(date +\%Y\%m\%d).sql 2>&1
Bash

Pour restaurer : arrêtez tout avec docker compose down, relancez PostgreSQL seul, injectez le dump avec psql, puis relancez l’ensemble. Le guide officiel détaille la procédure complète.

Pour mettre à jour Mail-Archiver, deux commandes suffisent : docker compose pull puis docker compose up -d. Vos données sont dans des volumes persistants et ne sont pas affectées.

Mail-Archiver est une solution d’archivage email simple, efficace, et entièrement sous votre contrôle. L’installation Docker prend moins de 15 minutes, la configuration d’un compte IMAP se fait en quelques clics, et une fois en place, l’application tourne silencieusement en arrière-plan pour protéger toute votre correspondance.

Si vous cherchez à libérer de l’espace dans vos boîtes email, à vous conformer à des obligations de conservation, ou simplement à avoir l’esprit tranquille, c’est l’outil qu’il vous faut.

🔗 GitHub Mail-Archiver · Documentation

Articles similaires

2 commentaires

  1. Bonjour.

    J’ai découvert Mail archiver avec votre vidéo. C’est exactement ce que je cherchais et votre article est vraiment précis, sans fioritures. Ça a rendu la mise en œuvre de ce logiciel extrêmement aisé pour moi.

    Merci beaucoup.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *