
mboxshell v0.6.2
mboxShell. Visionneuse terminal rapide pour fichiers MBOX de toute taille. Ouvrez, recherchez et exportez des e-mails depuis des sauvegardes Gmail Takeout (50 Go+) sans les charger en mémoire. Développé en Rust.
mboxShell
Visionneuse terminal rapide pour fichiers MBOX de toute taille. Ouvrez, recherchez et exportez des e-mails issus de sauvegardes Gmail Takeout (50 Go et plus) sans les charger en mémoire.
Pourquoi ce projet existe
Lorsque vous exportez vos e-mails depuis Gmail via Google Takeout, vous obtenez un ou plusieurs fichiers .mbox pouvant peser des dizaines de gigaoctets — plus une boîte aux lettres supplémentaire pour chaque groupe Google que vous possédez, facile à manquer et pouvant être plus volumineuse que l'export Gmail lui-même. Il n'existe aucun outil terminal multiplateforme permettant d'ouvrir, rechercher et parcourir ces fichiers efficacement sans les charger entièrement en mémoire.
mboxShell a été conçu pour résoudre ce problème : ouvrez un MBOX de 50 Go en quelques secondes, naviguez parmi des centaines de milliers de messages en douceur, recherchez par expéditeur, date ou contenu, et exportez ce dont vous avez besoin. Le tout depuis le terminal, sans interface graphique, sans serveur, sans dépendances externes.
Cas d'utilisation
- Parcourir les sauvegardes Gmail (Google Takeout) avec leurs libellés d'origine
- Lire les groupes que vous possédez, exportés par Takeout comme boîtes aux lettres distinctes — souvent les fichiers les plus volumineux de l'archive
- Analyser des archives mail sur des serveurs, lors de migrations ou d'audits
- Rechercher des messages dans des fichiers MBOX de toute source (Thunderbird, serveurs Unix, etc.)
- Exporter des messages au format EML, CSV ou texte brut pour un traitement ultérieur
- Extraire des pièces jointes individuellement ou en masse
- Fusionner plusieurs fichiers MBOX en un seul, en supprimant les doublons
Aussi sur Mac : mboxViewer
Si vous préférez une expérience graphique native sur macOS, découvrez mboxViewer — une application Mac native développée par la même équipe. Elle offre une interface familière de type boîte mail pour ouvrir, parcourir et rechercher des fichiers MBOX sans jamais les importer dans un client mail. Glissez-déposez votre fichier .mbox et accédez instantanément à tous vos messages, pièces jointes et libellés dans une fenêtre macOS native et épurée. Idéal pour les utilisateurs qui souhaitent la puissance du moteur d'analyse de mboxShell avec le confort d'une interface graphique de bureau.
Aussi dans votre navigateur : Online Mbox Viewer
Besoin d'apercevoir un fichier MBOX sans rien installer ? Essayez Online Mbox Viewer — une application web gratuite sous licence MIT du même auteur. Elle ouvre et affiche les fichiers .mbox entièrement dans votre navigateur : rien n'est téléchargé vers un serveur, vos e-mails restent donc sur votre machine. Parfait pour un aperçu rapide depuis n'importe quel appareil. Code source sur github.com/dcarrero/online-mbox-viewer.
Fonctionnalités
- Ne charge jamais le fichier en mémoire. Utilise des entrées/sorties en flux continu avec un tampon de 1 Mo. Un MBOX de 100 Go utilise environ les mêmes ~500 Mo de RAM qu'un fichier de 1 Go (seul l'index des métadonnées réside en mémoire).
- Indexation persistante. La première ouverture crée un index binaire (
.mboxshell.idx) afin que les ouvertures suivantes prennent moins d'une seconde. - Prise en charge complète de Gmail. Détecte et affiche les
X-Gmail-Labelscomme dossiers virtuels dans un panneau latéral, permettant de filtrer par Boîte de réception, Envoyés, Suivis, libellés personnalisés, etc. - Boîtes aux lettres Google Groups. Lit les fichiers
topics.mboxqu'un archive Takeout fournit pour chaque groupe que vous possédez, les nomme d'après le groupe plutôt que le nom de fichier insignifiant, affiche le groupe comme libellé virtuel et regroupe les conversations par l'identifiant exactX-GM-THRID. - Encodages corrects. Décode les mots encodés RFC 2047, prend en charge UTF-8, ISO-8859-1, Windows-1252, KOI8-R et tout jeu de caractères reconnu par
encoding_rs. - Regroupement en conversations. Regroupe les messages en fils de discussion à l'aide de l'algorithme JWZ (le même que celui utilisé par Netscape/Mozilla), ou l'identifiant de conversation propre à la boîte aux lettres lorsqu'il en existe un.
- Recherche avancée. Filtrage par champ (
from:,subject:,date:,body:,has:attachment,label:, etc.), plages de dates, filtres de taille, opérateurs ET/OU et négation. - Export flexible. Export individuel ou en masse vers EML, CSV (compatible Excel), texte brut. Extraction des pièces jointes décodées.
- Binaire unique. Aucun environnement d'exécution, aucune dépendance. Un exécutable d'environ 5 Mo fonctionnant sur Linux, macOS et Windows.
- Interface terminal complète. Navigation au clavier (style vi), trois modes de disposition, barre de recherche interactive, raccourcis configurables.
- Bilingue. Interface disponible en anglais et en espagnol, détectée automatiquement selon la langue du système.
Installation
Binaires précompilés (recommandé)
Téléchargez la dernière version pour votre plateforme depuis la page Releases :
| Plateforme | Binaire |
|---|---|
| Linux x86_64 | mboxshell-linux-x86_64 |
| Linux ARM64 | mboxshell-linux-aarch64 |
| Linux RISC-V 64 | mboxshell-linux-riscv64 |
| FreeBSD x86_64 | mboxshell-freebsd-x86_64 |
| macOS Intel | mboxshell-macos-x86_64 |
| macOS Apple Silicon | mboxshell-macos-aarch64 |
| Windows x86_64 | mboxshell-windows-x86_64.exe |
| Windows ARM64 | mboxshell-windows-arm64.exe |
Après le téléchargement, rendez-le exécutable et déplacez-le dans votre PATH :
# Linux / macOS
chmod +x mboxshell-*
sudo mv mboxshell-* /usr/local/bin/mboxshell
# Ou placez-le dans un répertoire local à l'utilisateur
mv mboxshell-* ~/.local/bin/mboxshell
Sous Windows, déplacez mboxshell-windows-x86_64.exe dans un dossier de votre PATH, ou exécutez-le directement.
Compilation depuis les sources
Prérequis : Rust 1.85 ou ultérieur.
# Cloner et compiler
git clone https://github.com/dcarrero/mboxshell.git
cd mboxshell
cargo build --release
# Le binaire se trouve dans target/release/mboxshell
# Installez-le à l'échelle du système :
sudo cp target/release/mboxshell /usr/local/bin/
# Ou pour l'utilisateur actuel uniquement :
cp target/release/mboxshell ~/.local/bin/
Compilation croisée pour d'autres plateformes
# Ajoutez la cible dont vous avez besoin
rustup target add aarch64-apple-darwin # macOS Apple Silicon
rustup target add x86_64-unknown-linux-gnu # Linux x86_64
rustup target add aarch64-unknown-linux-gnu # Linux ARM64
# Compilez pour une cible spécifique
cargo build --release --target aarch64-apple-darwin
Installation via Cargo
cargo install --git https://github.com/dcarrero/mboxshell.git
Démarrage rapide
# Ouvrir un fichier MBOX dans l'interface terminal
mboxshell mail.mbox
# Indexer et afficher les statistiques
mboxshell index mail.mbox
mboxshell stats mail.mbox
# Rechercher depuis la ligne de commande
mboxshell search mail.mbox "from:[email protected] date:2024"
mboxshell search mail.mbox "has:attachment subject:invoice" --json
# Exporter des messages
mboxshell export mail.mbox --format eml --output ./emails/
mboxshell export mail.mbox --format csv --output summary.csv
# Ne transmettre qu'une partie d'une archive : une nouvelle boîte aux lettres avec uniquement les correspondances
mboxshell export mail.mbox --format mbox --query "from:[email protected]" -o handover.mbox
# Extraire les pièces jointes
mboxshell attachments mail.mbox --output ./attachments/
# Fusionner plusieurs fichiers MBOX (les doublons sont supprimés par défaut)
mboxshell merge file1.mbox file2.mbox -o merged.mbox
# Fusionner en étiquetant chaque message avec la boîte aux lettres d'origine
mboxshell merge Inbox.mbox Sent.mbox -o merged.mbox --source-header
# Générer les complétions shell
mboxshell completions bash > /etc/bash_completion.d/mboxshell
mboxshell completions zsh > ~/.zfunc/_mboxshell
mboxshell completions fish > ~/.config/fish/completions/mboxshell.fish
Commandes CLI
| Commande | Description |
|---|---|
mboxshell [FILE] | Ouvrir un fichier dans la TUI (action par défaut) |
mboxshell open <path> | Ouvrir un fichier MBOX dans la TUI |
mboxshell index <path> [-f/--force] | Construire ou reconstruire l'index binaire |
mboxshell stats <path> [--json] | Afficher les statistiques d'un fichier MBOX |
mboxshell search <path> <query> [--json] | Rechercher des messages depuis la ligne de commande |
mboxshell export <path> -f <format> -o <output> [--query <q>] | Exporter des messages (formats : eml, csv, txt, html, mbox) |
mboxshell merge <files...> -o <output> [--no-dedup] [--source-header] | Fusionner plusieurs fichiers MBOX en un seul |
mboxshell attachments <path> -o <output> | Extraire toutes les pièces jointes |
mboxshell completions <shell> | Générer les complétions shell (bash, zsh, fish, powershell, elvish) |
mboxshell manpage | Générer une page de manuel |
Options globales :
| Option | Description |
|---|---|
-f, --force | Forcer la reconstruction de l'index même s'il existe (dans export, -f signifie --format — écrivez --force en toutes lettres ici) |
-v, --verbose | Augmenter la verbosité des journaux (-v info, -vv debug, -vvv trace) |
--lang <en|es> | Forcer la langue de l'interface (détection automatique par défaut) |
Options de fusion :
| Option | Description |
|---|---|
--no-dedup | Ignorer la détection des Message-ID en double et concaténer les entrées octet par octet (la déduplication est activée par défaut) |
--source-header | Injecter un en-tête X-Mbox-Source: <nom de la boîte aux lettres> dans chaque message, afin qu'une archive fusionnée reste traçable jusqu'à la boîte aux lettres d'origine de chaque e-mail |
Le libellé source est le nom de boîte aux lettres que vous voyez : pour un export Apple Mail — un répertoire Inbox.mbox contenant un fichier littéralement nommé mbox — il lit Inbox.mbox, pas mbox. Les boîtes aux lettres qui finiraient par partager un libellé sont désambiguïsées entre elles (Work/Inbox.mbox vs Personal/Inbox.mbox).
Interface terminal

Raccourcis clavier
| Touche | Action |
|---|---|
j / k | Message suivant / précédent |
g / G | Premier / dernier message |
PgDn / PgUp | Page suivante / précédente |
Enter | Ouvrir le message / passer à la vue message |
Shift-↑ / Shift-↓ | Faire défiler le corps du message sélectionné (conserve le focus de la liste) ; un indicateur de position (Top / NN% / Bot) s'affiche dans la bordure du message |
Tab / Shift-Tab | Parcourir le focus des panneaux |
Esc | Retour à la liste / fermer la fenêtre contextuelle |
/ | Ouvrir la barre de recherche |
f | Ouvrir la fenêtre contextuelle de filtre de recherche |
n / N | Résultat de recherche suivant / précédent |
Space | Marquer / démarquer le message |
* | Marquer / démarquer tout |
s | Parcourir la colonne de tri (Date, De, Objet, Taille) |
S | Inverser le sens du tri |
e | Exporter le message (EML, TXT, CSV, Pièces jointes) |
a | Afficher les pièces jointes (j/k pour naviguer, Entrée pour enregistrer, A pour tout enregistrer) |
t | Activer/désactiver la vue en fils de discussion (conversations) |
l | Afficher / focaliser / masquer la barre latérale des libellés |
h | Afficher/masquer les en-têtes complets |
r | Afficher/masquer la source brute du message |
1 / 2 / 3 | Disposition : liste seule / division horizontale / division verticale |
? | Aide |
q | Quitter |
Syntaxe de recherche
from:[email protected] Rechercher par expéditeur
to:[email protected] Rechercher par destinataire
cc:[email protected] Rechercher par destinataire en copie (Cc)
subject:invoice Rechercher dans la ligne d'objet
body:important text Rechercher dans le corps du message (texte intégral)
filename:report.pdf Rechercher par nom de fichier de pièce jointe
id:<message-id@domain> Rechercher par Message-ID
has:attachment Uniquement les messages avec pièces jointes
has:no-attachment Uniquement les messages sans pièces jointes
label:Inbox Filtrer par libellé Gmail
date:2024-01 Messages de janvier 2024
date:2024-01-01..2024-06-30 Plage de dates
before:2024-06-01 Avant une date (ce jour exclu)
after:2024-01-01 À partir d'une date (ce jour inclus)
after:2024-01-01 before:2025-01-01 Toute l'année 2024
size:>1mb Messages de plus de 1 Mo
size:>1mb size:<5mb Entre 1 et 5 Mo
-subject:spam Exclure les messages contenant « spam » dans l'objet
"exact phrase" Rechercher une phrase exacte
from:john subject:budget ET implicite (les deux doivent correspondre)
term1 OR term2 OU explicite
from:a OR from:b subject:budget OU se lie plus fortement : (a OU b) ET subject
Formats d'entrée pris en charge
| Format | Extension | Description |
|---|---|---|
| MBOX (mboxrd/mboxo) | .mbox | Format standard. Google Takeout, Thunderbird, serveurs Unix |
| Export Google Groups | topics.mbox | Dans une archive Takeout, à <groupe>@googlegroups.com/. Le nom de fichier est localisé (temas.mbox, …), la boîte aux lettres est donc nommée d'après le groupe — voir docs/GOOGLE-GROUPS.md |
| Package Apple Mail | Name.mbox/mbox | Le fichier interne est celui qui est lu ; la boîte aux lettres est nommée d'après le package |
Performances
Testé avec de véritables fichiers MBOX Google Takeout :
| Taille du fichier | Messages | Indexation | Réouverture |
|---|---|---|---|
| 500 Mo | ~5 000 | ~3 s | < 1 s |
| 5 Go | ~50 000 | ~30 s | < 1 s |
| 50 Go | ~500 000 | ~5 min | < 1 s |
La navigation dans la liste des messages est instantanée grâce au défilement virtuel (seules les lignes visibles sont rendues).
Configuration
Le fichier de configuration se trouve à ~/.config/mboxshell/config.toml :
[general]
default_sort = "date"
sort_order = "desc"
date_format = "%Y-%m-%d %H:%M"
log_level = "warn"
[display]
theme = "dark"
layout = "horizontal"
show_sidebar = false
max_cached_messages = 50
[export]
default_format = "eml"
csv_separator = ","
Architecture
src/
+-- main.rs # CLI avec clap
+-- lib.rs # Ré-exports de modules
+-- error.rs # Types d'erreur avec thiserror
+-- config.rs # Configuration TOML
+-- mailbox_naming.rs # Noms de boîtes aux lettres lisibles (packages Apple Mail)
+-- i18n/ # Internationalisation (EN/ES)
+-- parser/
| +-- mbox.rs # Analyseur en flux continu (ne charge jamais le fichier en mémoire)
| +-- eml.rs # Analyseur de fichiers EML individuels
| +-- mime.rs # Décodage MIME, multipart, jeux de caractères
| +-- header.rs # En-têtes RFC 5322, mots encodés RFC 2047
+-- index/
| +-- builder.rs # Construction de l'index binaire
| +-- reader.rs # Requêtes d'index
| +-- format.rs # Format binaire avec vérification d'intégrité SHA-256
+-- model/
| +-- mail.rs # MailEntry, MailBody
| +-- attachment.rs # Métadonnées des pièces jointes
| +-- address.rs # Analyse des adresses RFC 5322
+-- store/
| +-- reader.rs # Lecture basée sur les offsets avec cache LRU
+-- search/
| +-- query.rs # Analyseur de requêtes de recherche
| +-- metadata.rs # Recherche rapide dans l'index (O(n), < 200 ms pour 1 M de messages)
| +-- fulltext.rs # Recherche plein texte en flux continu
+-- export/
| +-- eml.rs # Export vers .eml
| +-- csv.rs # Export du résumé vers CSV (BOM UTF-8)
| +-- text.rs # Export vers texte brut
| +-- attachment.rs # Extraction des pièces jointes
| +-- mbox.rs # Fusion MBOX avec déduplication et en-tête de source
+-- tui/
+-- app.rs # État global (architecture Elm)
+-- event.rs # Gestion des événements clavier
+-- ui.rs # Disposition et répartition du rendu
+-- threading.rs # Algorithme JWZ pour les fils de conversation
+-- theme.rs # Thème de couleurs
+-- widgets/ # Composants visuels
+-- mail_list.rs # Liste avec défilement virtuel
+-- mail_view.rs # Visionneuse de messages avec défilement
+-- sidebar.rs # Panneau des libellés/dossiers
+-- header_bar.rs # Barre supérieure
+-- status_bar.rs # Barre d'état
+-- search_bar.rs # Barre de recherche
+-- search_popup.rs # Fenêtre contextuelle de filtre de recherche
+-- help_popup.rs # Fenêtre contextuelle d'aide
+-- attachment_popup.rs # Fenêtre contextuelle des pièces jointes
+-- export_popup.rs # Fenêtre contextuelle d'export
Dépendances clés
| Crate | Objectif |
|---|---|
ratatui + crossterm | Interface terminal |
mail-parser | Analyse MIME/RFC 5322 |
encoding_rs | Décodage des jeux de caractères |
chrono | Dates et fuseaux horaires |
clap | Analyse des arguments CLI |
serde + bincode | Sérialisation de l'index |
sha2 | Vérification de l'intégrité de l'index |
lru | Cache des messages décodés |
tracing | Journalisation structurée |
Sponsors
mboxshell est développé en open source et est soutenu par :
- Colorvivo — experts en WordPress, IA et médias numériques.
- Stackscale — experts en infrastructure cloud privée.
Si votre entreprise trouve mboxshell utile et souhaite soutenir son développement continu, consultez .github/FUNDING.yml ou contactez-nous via carrero.es.
Documentation
Le manuel utilisateur complet couvre chaque commande, raccourci clavier, opérateur de recherche, option d'export et clé de configuration :
- docs/MANUAL.md — Manuel utilisateur (anglais)
- docs/MANUAL-ES.md — Manuel de usuario (Español)
Journal des modifications
Voir CHANGELOG.md pour l'historique complet des versions.
Licence
MIT - Copyright (c) 2026 David Carrero Fernandez-Baillo - https://carrero.es
Code source : https://github.com/dcarrero/mboxshell