
mboxshell v0.7.3
mboxShell. Visualizzatore da terminale veloce per file MBOX di qualsiasi dimensione. Apri, cerca ed esporta email dai backup di Gmail Takeout (50GB+) senza caricarli in memoria. Realizzato in Rust.
mboxShell
Visualizzatore terminale veloce per file MBOX di qualsiasi dimensione. Apri, cerca ed esporta email dai backup di Gmail Takeout (50 GB+) senza caricarli in memoria.
Perché esiste questo progetto
Quando esporti la tua email da Gmail usando Google Takeout, ottieni uno o più file .mbox che possono pesare decine di gigabyte — più una casella di posta aggiuntiva per ogni Google Group che possiedi, che è facile da dimenticare e può essere più grande dell'esportazione di Gmail stessa. Non esiste uno strumento terminale multipiattaforma che ti permetta di aprire, cercare e sfogliare quei file in modo efficiente senza caricarli interamente in memoria.
mboxShell è stato creato per risolvere questo problema: aprire un MBOX da 50 GB in pochi secondi, navigare centinaia di migliaia di messaggi senza problemi, cercare per mittente, data o contenuto, ed esportare ciò di cui hai bisogno. Tutto dal terminale, senza GUI, senza server, senza dipendenze esterne.
Casi d'uso
- Sfoglia i backup di Gmail (Google Takeout) con le loro etichette originali
- Leggi i gruppi che possiedi, esportati da Takeout come caselle di posta proprie — spesso i file più grandi dell'archivio
- Analizza archivi di posta su server, durante migrazioni o audit
- Cerca messaggi in file MBOX da qualsiasi fonte (Thunderbird, server Unix, ecc.)
- Esporta messaggi in EML, CSV o testo semplice per ulteriori elaborazioni
- Estrai allegati singolarmente o in blocco
- Unisci più file MBOX in uno solo, rimuovendo i duplicati
Anche su Mac: mboxViewer
Se preferisci un'esperienza grafica nativa su macOS, dai un'occhiata a mboxViewer — un'app Mac nativa creata dallo stesso team. Fornisce un'interfaccia familiare in stile casella di posta per aprire, sfogliare e cercare file MBOX senza mai importarli in un client di posta. Trascina e rilascia il tuo file .mbox e ottieni accesso immediato a tutti i tuoi messaggi, allegati ed etichette in una finestra nativa macOS pulita. Ideale per gli utenti che desiderano la potenza del motore di parsing di mboxShell con il comfort di una GUI desktop.
Anche nel tuo browser: Online Mbox Viewer
Hai bisogno di dare un'occhiata a un file MBOX senza installare nulla? Prova Online Mbox Viewer — un'app web gratuita, con licenza MIT, dello stesso autore. Apre e visualizza i file .mbox interamente nel tuo browser: nulla viene caricato su alcun server, quindi la tua email rimane sulla tua macchina. Perfetto per una rapida occhiata da qualsiasi dispositivo. Codice sorgente su github.com/dcarrero/online-mbox-viewer.
Funzionalità
- Non carica mai il file in memoria. Utilizza I/O in streaming con un buffer da 1 MB. Un MBOX da 100 GB utilizza all'incirca gli stessi ~500 MB di RAM di uno da 1 GB (solo l'indice dei metadati risiede in memoria).
- Indicizzazione persistente. La prima apertura crea un indice binario (
.mboxshell.idx) così le aperture successive richiedono meno di un secondo. - Supporto completo per Gmail. Rileva e visualizza
X-Gmail-Labelscome cartelle virtuali in un pannello laterale, permettendoti di filtrare per Inbox, Sent, Starred, etichette personalizzate, ecc. - Caselle di posta Google Groups. Legge i file
topics.mboxche un archivio Takeout include per ogni gruppo che possiedi, li rinomina con il nome del gruppo invece del nome file senza significato, mostra il gruppo come etichetta virtuale e raggruppa le conversazioni tramite l'id esattoX-GM-THRID. - Codifiche corrette. Decodifica le encoded-word RFC 2047, supporta UTF-8, ISO-8859-1, Windows-1252, KOI8-R e qualsiasi charset riconosciuto da
encoding_rs. - Threading delle conversazioni. Raggruppa i messaggi in thread usando l'algoritmo JWZ (lo stesso usato da Netscape/Mozilla), o l'id di conversazione proprio della casella di posta quando ne ha uno.
- Ricerca avanzata. Filtro per campo specifico (
from:,subject:,date:,body:,has:attachment,label:, ecc.), intervalli di date, filtri per dimensione, operatori AND/OR e negazione. - Esportazione flessibile. Esportazione individuale o in blocco in EML, CSV (compatibile con Excel), testo semplice. Estrazione di allegati decodificati.
- Binario singolo. Nessun runtime, nessuna dipendenza. Un eseguibile di ~5 MB che funziona su Linux, macOS e Windows.
- Interfaccia terminale completa. Navigazione da tastiera (stile vi), tre modalità di layout, barra di ricerca interattiva, scorciatoie configurabili.
- Bilingue. Interfaccia disponibile in inglese e spagnolo, rilevata automaticamente dalla locale di sistema.
Installazione
Binari precompilati (consigliato)
Scarica l'ultima release per la tua piattaforma dalla pagina Releases:
| Piattaforma | Binario |
|---|---|
| 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 |
Dopo il download, rendilo eseguibile e spostalo nel tuo PATH:
# Linux / macOS
chmod +x mboxshell-*
sudo mv mboxshell-* /usr/local/bin/mboxshell
# Or place it in a user-local directory
mv mboxshell-* ~/.local/bin/mboxshell
Su Windows, sposta mboxshell-windows-x86_64.exe in una cartella nel tuo PATH, oppure eseguilo direttamente.
Compilazione dal sorgente
Requisiti: Rust 1.85 o successivo.
# Clone and build
git clone https://github.com/dcarrero/mboxshell.git
cd mboxshell
cargo build --release
# The binary is at target/release/mboxshell
# Install it system-wide:
sudo cp target/release/mboxshell /usr/local/bin/
# Or for the current user only:
cp target/release/mboxshell ~/.local/bin/
Cross-compilazione per altre piattaforme
# Add the target you need
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
# Build for a specific target
cargo build --release --target aarch64-apple-darwin
Installazione tramite Cargo
cargo install --git https://github.com/dcarrero/mboxshell.git
Avvio rapido
# Open an MBOX file in the terminal UI
mboxshell mail.mbox
# Index and show statistics
mboxshell index mail.mbox
mboxshell stats mail.mbox
# Search from the command line
mboxshell search mail.mbox "from:[email protected] date:2024"
mboxshell search mail.mbox "has:attachment subject:invoice" --json
# Export messages
mboxshell export mail.mbox --format eml --output ./emails/
mboxshell export mail.mbox --format csv --output summary.csv
# Hand over only part of an archive: a new mailbox with just the matches
mboxshell export mail.mbox --format mbox --query "from:[email protected]" -o handover.mbox
# Extract attachments
mboxshell attachments mail.mbox --output ./attachments/
# Merge multiple MBOX files (duplicates are removed by default)
mboxshell merge file1.mbox file2.mbox -o merged.mbox
# Merge tagging every message with the mailbox it came from
mboxshell merge Inbox.mbox Sent.mbox -o merged.mbox --source-header
# Generate shell completions
mboxshell completions bash > /etc/bash_completion.d/mboxshell
mboxshell completions zsh > ~/.zfunc/_mboxshell
mboxshell completions fish > ~/.config/fish/completions/mboxshell.fish
Comandi CLI
| Comando | Descrizione |
|---|---|
mboxshell [FILE] | Apre un file nella TUI (azione predefinita) |
mboxshell open <path> | Apre un file MBOX nella TUI |
mboxshell index <path> [-f/--force] | Crea o ricrea l'indice binario |
mboxshell stats <path> [--json] | Mostra statistiche su un file MBOX |
mboxshell search <path> <query> [--json] | Cerca messaggi dalla riga di comando |
mboxshell export <path> -f <format> -o <output> [--query <q>] | Esporta messaggi (formati: eml, csv, txt, html, mbox) |
mboxshell merge <files...> -o <output> [--no-dedup] [--source-header] | Unisce più file MBOX in uno |
mboxshell attachments <path> -o <output> | Estrae tutti gli allegati |
mboxshell completions <shell> | Genera i completamenti della shell (bash, zsh, fish, powershell, elvish) |
mboxshell manpage | Genera una pagina man |
Flag globali:
| Flag | Descrizione |
|---|---|
-f, --force | Forza la ricostruzione dell'indice anche se ne esiste uno (in export, -f è --format — scrivi esplicitamente --force lì) |
-v, --verbose | Aumenta la verbosità del log (-v info, -vv debug, -vvv trace) |
--lang <en|es> | Forza la lingua dell'interfaccia (rilevata automaticamente per impostazione predefinita) |
Flag di merge:
| Flag | Descrizione |
|---|---|
--no-dedup | Salta il rilevamento dei Message-ID duplicati e concatena gli input byte per byte (la deduplicazione è attiva per impostazione predefinita) |
--source-header | Inietta un header X-Mbox-Source: <mailbox name> in ogni messaggio, così un archivio unito rimane tracciabile fino alla casella di posta da cui proviene ogni email |
L'etichetta di origine è il nome della casella di posta che vedi: per un'esportazione di Apple Mail — una directory Inbox.mbox contenente un file letteralmente chiamato mbox — legge Inbox.mbox, non mbox. Le caselle di posta che finirebbero per condividere un'etichetta vengono disambiguate tra loro (Work/Inbox.mbox vs Personal/Inbox.mbox).
Interfaccia terminale

Scorciatoie da tastiera
| Tasto | Azione |
|---|---|
j / k | Messaggio successivo / precedente |
g / G | Primo / ultimo messaggio |
PgDn / PgUp | Pagina giù / su |
Enter | Apri messaggio / passa alla vista messaggio |
Shift-↑ / Shift-↓ | Scorri il corpo del messaggio selezionato (mantiene il focus sulla lista); un indicatore di posizione (Top / NN% / Bot) viene mostrato nel bordo del messaggio |
Tab / Shift-Tab | Cicla il focus tra i pannelli |
Esc | Torna alla lista / chiudi popup |
/ | Apri la barra di ricerca |
f | Apri il popup del filtro di ricerca |
n / N | Risultato di ricerca successivo / precedente |
Space | Contrassegna / deseleziona messaggio |
* | Contrassegna / deseleziona tutti |
s | Cicla la colonna di ordinamento (Date, From, Subject, Size) |
S | Inverti la direzione di ordinamento |
e | Esporta messaggio (EML, TXT, CSV, Attachments) |
a | Mostra allegati (j/k per navigare, Enter per salvare, A per salvare tutti) |
t | Attiva/disattiva la vista threaded (conversazione) |
l | Mostra / metti a fuoco / nascondi la barra laterale delle etichette |
h | Attiva/disattiva gli header completi |
r | Attiva/disattiva il sorgente grezzo del messaggio |
1 / 2 / 3 | Layout: solo lista / split orizzontale / split verticale |
? | Aiuto |
q | Esci |
Sintassi di ricerca
from:[email protected] Search by sender
to:[email protected] Search by recipient
cc:[email protected] Search by Cc recipient
subject:invoice Search in subject line
body:important text Search in message body (full-text)
filename:report.pdf Search by attachment file name
id:<message-id@domain> Search by Message-ID
has:attachment Only messages with attachments
has:no-attachment Only messages without attachments
label:Inbox Filter by Gmail label
date:2024-01 Messages from January 2024
date:2024-01-01..2024-06-30 Date range
before:2024-06-01 Before a date (that day excluded)
after:2024-01-01 From a date on (that day included)
after:2024-01-01 before:2025-01-01 All of 2024
size:>1mb Messages larger than 1 MB
size:>1mb size:<5mb Between 1 and 5 MB
-subject:spam Exclude messages with "spam" in subject
"exact phrase" Search for an exact phrase
from:john subject:budget Implicit AND (both must match)
term1 OR term2 Explicit OR
from:a OR from:b subject:budget OR binds tighter: (a OR b) AND subject
Formati di input supportati
| Formato | Estensione | Descrizione |
|---|---|---|
| MBOX (mboxrd/mboxo) | .mbox | Formato standard. Google Takeout, Thunderbird, server Unix |
| Esportazione Google Groups | topics.mbox | All'interno di un archivio Takeout, in <group>@googlegroups.com/. Il nome del file è localizzato (temas.mbox, …), quindi la casella di posta viene nominata con il nome del gruppo — vedi docs/GOOGLE-GROUPS.md |
| Pacchetto Apple Mail | Name.mbox/mbox | Il file interno è quello che viene letto; la casella di posta viene nominata con il nome del pacchetto |
Prestazioni
Testato con file MBOX reali di Google Takeout:
| Dimensione file | Messaggi | Indicizzazione | Riapertura |
|---|---|---|---|
| 500 MB | ~5,000 | ~3 s | < 1 s |
| 5 GB | ~50,000 | ~30 s | < 1 s |
| 50 GB | ~500,000 | ~5 min | < 1 s |
La navigazione nella lista dei messaggi è istantanea grazie allo scorrimento virtuale (vengono renderizzate solo le righe visibili).
Configurazione
Il file di configurazione si trova in ~/.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 = ","
Architettura
src/
+-- main.rs # CLI with clap
+-- lib.rs # Module re-exports
+-- error.rs # Error types with thiserror
+-- config.rs # TOML configuration
+-- mailbox_naming.rs # Human-facing mailbox names (Apple Mail packages)
+-- i18n/ # Internationalization (EN/ES)
+-- parser/
| +-- mbox.rs # Streaming parser (never loads the file into memory)
| +-- eml.rs # Individual EML file parser
| +-- mime.rs # MIME decoding, multipart, charsets
| +-- header.rs # RFC 5322 headers, RFC 2047 encoded-words
+-- index/
| +-- builder.rs # Binary index construction
| +-- reader.rs # Index queries
| +-- format.rs # Binary format with SHA-256 integrity check
+-- model/
| +-- mail.rs # MailEntry, MailBody
| +-- attachment.rs # Attachment metadata
| +-- address.rs # RFC 5322 address parsing
+-- store/
| +-- reader.rs # Offset-based reading with LRU cache
+-- search/
| +-- query.rs # Search query parser
| +-- metadata.rs # Fast index search (O(n), < 200ms for 1M messages)
| +-- fulltext.rs # Streaming full-text search
+-- export/
| +-- eml.rs # Export to .eml
| +-- csv.rs # Export summary to CSV (UTF-8 BOM)
| +-- text.rs # Export to plain text
| +-- attachment.rs # Attachment extraction
| +-- mbox.rs # MBOX merge with deduplication and source header
+-- tui/
+-- app.rs # Global state (Elm Architecture)
+-- event.rs # Keyboard event handling
+-- ui.rs # Layout and render dispatch
+-- threading.rs # JWZ algorithm for conversation threads
+-- theme.rs # Color theme
+-- widgets/ # Visual components
+-- mail_list.rs # List with virtual scrolling
+-- mail_view.rs # Message viewer with scroll
+-- sidebar.rs # Labels/folders panel
+-- header_bar.rs # Top bar
+-- status_bar.rs # Status bar
+-- search_bar.rs # Search bar
+-- search_popup.rs # Search filter popup
+-- help_popup.rs # Help popup
+-- attachment_popup.rs # Attachment popup
+-- export_popup.rs # Export popup
Dipendenze principali
| Crate | Scopo |
|---|---|
ratatui + crossterm | Interfaccia terminale |
mail-parser | Parsing MIME/RFC 5322 |
encoding_rs | Decodifica charset |
chrono | Date e fusi orari |
clap | Parsing degli argomenti CLI |
serde + bincode | Serializzazione dell'indice |
sha2 | Verifica dell'integrità dell'indice |
lru | Cache dei messaggi decodificati |
tracing | Logging strutturato |
Sponsor
mboxshell è sviluppato in modo aperto ed è supportato da:
- Colorvivo — esperti in WordPress, AI e media digitali.
- Stackscale — esperti in infrastrutture cloud private.
Se la tua azienda trova mboxshell utile e vuole supportarne lo sviluppo continuo, vedi .github/FUNDING.yml o contattaci tramite carrero.es.
Documentazione
Il manuale utente completo copre ogni comando, scorciatoia da tastiera, operatore di ricerca, opzione di esportazione e chiave di configurazione:
- docs/MANUAL.md — Manuale utente (inglese)
- docs/MANUAL-ES.md — Manual de usuario (Español)
Changelog
Vedi CHANGELOG.md per la cronologia completa delle release.
Licenza
MIT - Copyright (c) 2026 David Carrero Fernandez-Baillo - https://carrero.es
Codice sorgente: https://github.com/dcarrero/mboxshell