
mboxShell. Visor de terminal rápido para archivos MBOX de cualquier tamaño. Abre, busca y exporta correos electrónicos de copias de seguridad de Gmail Takeout (50 GB+) sin cargarlos en la memoria. Construido en Rust.
# mboxShell **Visor rapido de terminal para archivos MBOX de cualquier tamano. Abre, busca y exporta correos de backups Gmail Takeout (50 GB+) sin cargarlos en memoria.** [](LICENSE) [](https://www.rust-lang.org) [Read in English](https://github.com/dcarrero/mboxshell/blob/main/README.md) --- ## Por que existe este proyecto Cuando exportas tu correo de Gmail con Google Takeout, recibes uno o varios archivos `.mbox` que pueden pesar decenas de gigabytes. No existe una herramienta de terminal multiplataforma que permita abrir, buscar y consultar esos archivos de forma eficiente sin cargarlos enteros en memoria. `mboxShell` nacio para resolver ese problema: abrir un MBOX de 50 GB en segundos, navegar entre cientos de miles de mensajes con fluidez, buscar por remitente, fecha o contenido, y exportar lo que necesites. Todo desde la terminal, sin interfaz grafica, sin servidor, sin dependencias externas. ## Casos de uso - **Consultar backups de Gmail** (Google Takeout) con sus etiquetas originales - **Analizar archivos de correo** en servidores, migraciones o auditorias - **Buscar mensajes** en archivos MBOX de cualquier origen (Thunderbird, servidores Unix, etc.) - **Exportar mensajes** a EML, CSV o texto plano para procesamiento posterior - **Extraer adjuntos** de forma masiva o individual - **Combinar varios MBOX** en uno solo, eliminando duplicados ## Tambien en Mac: mboxViewer Si prefieres una experiencia grafica nativa en macOS, echa un vistazo a [mboxViewer](https://mboxviewer.net) — una app nativa para Mac creada por el mismo equipo. Ofrece una interfaz de buzon de correo familiar para abrir, explorar y buscar archivos MBOX sin necesidad de importarlos en un cliente de correo. Arrastra tu archivo `.mbox` y tendras acceso instantaneo a todos tus mensajes, adjuntos y etiquetas en una ventana nativa de macOS. Ideal para quienes quieren la potencia del motor de parsing de mboxShell con la comodidad de una interfaz de escritorio. ## Tambien en el navegador: Online Mbox Viewer ¿Solo necesitas echar un vistazo a un archivo MBOX sin instalar nada? Prueba [Online Mbox Viewer](https://onlinemboxviewer.com) — una app web gratuita y con licencia MIT del mismo autor. Abre y muestra archivos `.mbox` por completo en tu navegador: no se sube nada a ningun servidor, asi que tu correo nunca sale de tu equipo. Perfecto para una consulta rapida desde cualquier dispositivo. Codigo fuente en [github.com/dcarrero/online-mbox-viewer](https://github.com/dcarrero/online-mbox-viewer). ## Caracteristicas - **No carga el archivo en memoria.** Usa lectura streaming con buffer de 1 MB. Un MBOX de 100 GB consume los mismos ~500 MB de RAM que uno de 1 GB (solo el indice de metadatos vive en memoria). - **Indexacion persistente.** La primera apertura crea un indice binario (`.mboxshell.idx`) que permite abrir el archivo en menos de un segundo en sucesivas ejecuciones. - **Soporte completo de Gmail.** Detecta y muestra las etiquetas de `X-Gmail-Labels` como carpetas virtuales en un panel lateral, permitiendo filtrar por Inbox, Sent, Starred, etiquetas personalizadas, etc. - **Codificaciones correctas.** Decodifica encoded-words (RFC 2047), soporta UTF-8, ISO-8859-1, Windows-1252, KOI8-R y cualquier charset reconocido por `encoding_rs`. - **Vista de conversaciones.** Agrupa mensajes en hilos usando el algoritmo JWZ (el mismo que usaba Netscape/Mozilla). - **Busqueda avanzada.** Filtrado por campo (`from:`, `subject:`, `date:`, `body:`, `has:attachment`, `label:`, etc.), rangos de fechas, tamano, operadores AND/OR y negacion. - **Exportacion flexible.** Mensajes individuales o en masa a EML, CSV (compatible Excel), texto plano. Extraccion de adjuntos decodificados. - **Binario unico.** Sin runtime, sin dependencias. Un ejecutable de ~5 MB que funciona en Linux, macOS y Windows. - **Interfaz de terminal completa.** Navegacion con teclado (estilo vi), tres modos de layout, barra de busqueda interactiva, atajos configurables. - **Bilingue.** Interfaz disponible en ingles y espanol, deteccion automatica del idioma del sistema. ## Instalacion ### Binarios precompilados (recomendado) Descarga la ultima version para tu plataforma desde la pagina de [Releases](https://github.com/dcarrero/mboxshell/releases): | Plataforma | 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` | Tras descargar, dale permisos de ejecucion y muevelo a tu PATH: ```bash # Linux / macOS chmod +x mboxshell-* sudo mv mboxshell-* /usr/local/bin/mboxshell # O colocalo en un directorio local de usuario mv mboxshell-* ~/.local/bin/mboxshell ``` En Windows, mueve `mboxshell-windows-x86_64.exe` a una carpeta en tu `PATH`, o ejecutalo directamente. ### Compilar desde el codigo fuente Requisitos: [Rust](https://www.rust-lang.org/tools/install) 1.85 o superior. ```bash # Clonar y compilar git clone https://github.com/dcarrero/mboxshell.git cd mboxshell cargo build --release # El binario esta en target/release/mboxshell # Instalar a nivel de sistema: sudo cp target/release/mboxshell /usr/local/bin/ # O solo para el usuario actual: cp target/release/mboxshell ~/.local/bin/ ``` #### Compilacion cruzada para otras plataformas ```bash # Anadir el target que necesites 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 # Compilar para un target especifico cargo build --release --target aarch64-apple-darwin ``` ### Instalar via Cargo ```bash cargo install --git https://github.com/dcarrero/mboxshell.git ``` ## Uso rapido ```bash # Abrir un archivo MBOX en la interfaz de terminal mboxshell correo.mbox # Indexar y ver estadisticas mboxshell index correo.mbox mboxshell stats correo.mbox # Buscar mensajes desde la linea de comandos mboxshell search correo.mbox "from:[email protected] date:2024" mboxshell search correo.mbox "has:attachment subject:factura" --json # Exportar mensajes mboxshell export correo.mbox --format eml --output ./emails/ mboxshell export correo.mbox --format csv --output resumen.csv # Extraer adjuntos mboxshell attachments correo.mbox --output ./adjuntos/ # Combinar varios MBOX eliminando duplicados mboxshell merge archivo1.mbox archivo2.mbox -o combinado.mbox --dedup # Generar completions para tu shell mboxshell completions bash > /etc/bash_completion.d/mboxshell mboxshell completions zsh > ~/.zfunc/_mboxshell mboxshell completions fish > ~/.config/fish/completions/mboxshell.fish ``` ## Comandos CLI | Comando | Descripcion | |---------|-------------| | `mboxshell [ARCHIVO]` | Abrir en la interfaz de terminal (accion por defecto) | | `mboxshell open <ruta>` | Abrir un fichero MBOX en la TUI | | `mboxshell index <ruta> [-f/--force]` | Construir o reconstruir el indice binario | | `mboxshell stats <ruta> [--json]` | Mostrar estadisticas de un archivo MBOX | | `mboxshell search <ruta> <consulta> [--json]` | Buscar mensajes desde la linea de comandos | | `mboxshell export <ruta> -f <formato> -o <salida> [--query <q>]` | Exportar mensajes (formatos: eml, csv, txt, html) | | `mboxshell merge <archivos...> -o <salida> [--dedup]` | Combinar varios archivos MBOX en uno | | `mboxshell attachments <ruta> -o <salida>` | Extraer todos los adjuntos | | `mboxshell completions <shell>` | Generar completions de shell (bash, zsh, fish, powershell, elvish) | | `mboxshell manpage` | Generar pagina de manual | **Flags globales:** | Flag | Descripcion | |------|-------------| | `-f`, `--force` | Forzar reconstruccion del indice aunque exista | | `-v`, `--verbose` | Aumentar verbosidad del log (-v info, -vv debug, -vvv trace) | | `--lang <en\|es>` | Forzar idioma de la interfaz (auto-detectado por defecto) | ## Interfaz de terminal  ## Atajos de teclado | Tecla | Accion | |-------|--------| | `j` / `k` | Mensaje siguiente / anterior | | `g` / `G` | Primer / ultimo mensaje | | `PgDn` / `PgUp` | Pagina abajo / arriba | | `Enter` | Abrir mensaje / cambiar a vista de mensaje | | `Shift-↑` / `Shift-↓` | Scroll del cuerpo del mensaje (mantiene foco en lista); un indicador de posición (`Inicio` / `NN%` / `Fin`) aparece en el borde del mensaje | | `Tab` / `Shift-Tab` | Cambiar panel | | `Esc` | Volver a la lista / cerrar popup | | `/` | Abrir barra de busqueda | | `f` | Abrir popup de filtros de busqueda | | `n` / `N` | Siguiente / anterior resultado de busqueda | | `Space` | Marcar / desmarcar mensaje | | `*` | Marcar / desmarcar todos | | `s` | Cambiar columna de ordenacion (Fecha, De, Asunto, Tamano) | | `S` | Invertir direccion de ordenacion | | `e` | Exportar mensaje (EML, TXT, CSV, Adjuntos) | | `a` | Ver adjuntos (j/k para navegar, Enter para guardar, A para guardar todos) | | `t` | Alternar vista de conversaciones (threads) | | `l` | Mostrar / enfocar / ocultar panel de etiquetas | | `h` | Mostrar todos los headers | | `r` | Mostrar mensaje en formato raw | | `1` / `2` / `3` | Layout: solo lista / horizontal / vertical | | `?` | Ayuda | | `q` | Salir | ## Sintaxis de busqueda ``` from:[email protected] Buscar por remitente to:[email protected] Buscar por destinatario cc:[email protected] Buscar por destinatario en copia (Cc) subject:factura Buscar en el asunto body:texto importante Buscar en el cuerpo del mensaje filename:informe.pdf Buscar por nombre de adjunto id:<message-id@dominio> Buscar por Message-ID has:attachment Solo mensajes con adjuntos has:no-attachment Solo mensajes sin adjuntos label:Inbox Filtrar por etiqueta de Gmail date:2024-01 Mensajes de enero 2024 date:2024-01-01..2024-06-30 Rango de fechas before:2024-06-01 Antes de una fecha after:2024-01-01 Despues de una fecha size:>1mb Mensajes de mas de 1 MB -subject:spam Excluir mensajes con "spam" "frase exacta" Buscar frase completa from:juan subject:presupuesto AND implicito (ambos deben coincidir) term1 OR term2 OR explicito ``` ## Formatos de entrada soportados | Formato | Extension | Descripcion | |---------|-----------|-------------| | MBOX (mboxrd/mboxo) | `.mbox` | Formato estandar. Google Takeout, Thunderbird, servidores Unix | ## Rendimiento Probado con archivos MBOX reales de Google Takeout: | Tamano del archivo | Mensajes | Indexacion | Re-apertura | |--------------------|----------|------------|-------------| | 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 navegacion por la lista de mensajes es instantanea gracias al virtual scrolling (solo se renderizan las filas visibles). ## Configuracion El archivo de configuracion se ubica en `~/.config/mboxshell/config.toml`: ```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 = "," ``` ## Arquitectura ``` src/ +-- main.rs # CLI con clap +-- lib.rs # Re-exporta modulos +-- error.rs # Tipos de error con thiserror +-- config.rs # Configuracion TOML +-- i18n/ # Internacionalizacion (EN/ES) +-- parser/ | +-- mbox.rs # Parser streaming (nunca carga el archivo en memoria) | +-- eml.rs # Parser de archivos EML individuales | +-- mime.rs # Decodificacion MIME, multipart, charsets | +-- header.rs # Headers RFC 5322, encoded-words RFC 2047 +-- index/ | +-- builder.rs # Construccion del indice binario | +-- reader.rs # Consulta del indice | +-- format.rs # Formato binario con verificacion SHA-256 +-- model/ | +-- mail.rs # MailEntry, MailBody | +-- attachment.rs # Metadatos de adjuntos | +-- address.rs # Parsing de direcciones RFC 5322 +-- store/ | +-- reader.rs # Lectura por offset con cache LRU +-- search/ | +-- query.rs # Parser de queries de busqueda | +-- metadata.rs # Busqueda rapida en indice (O(n), < 200ms para 1M msgs) | +-- fulltext.rs # Busqueda full-text streaming +-- export/ | +-- eml.rs # Exportar a .eml | +-- csv.rs # Exportar resumen a CSV (UTF-8 BOM) | +-- text.rs # Exportar a texto plano | +-- attachment.rs # Extraccion de adjuntos | +-- mbox.rs # Merge de MBOX con deduplicacion +-- tui/ +-- app.rs # Estado global (Elm Architecture) +-- event.rs # Manejo de eventos de teclado +-- ui.rs # Layout y dispatch de renderizado +-- threading.rs # Algoritmo JWZ para hilos de conversacion +-- theme.rs # Tema de colores +-- widgets/ # Componentes visuales +-- mail_list.rs # Lista con virtual scrolling +-- mail_view.rs # Visor de mensaje con scroll +-- sidebar.rs # Panel de etiquetas/carpetas +-- header_bar.rs # Barra superior +-- status_bar.rs # Barra de estado +-- search_bar.rs # Barra de busqueda +-- search_popup.rs # Popup de filtros de busqueda +-- help_popup.rs # Popup de ayuda +-- attachment_popup.rs # Popup de adjuntos +-- export_popup.rs # Popup de exportacion ``` ## Dependencias principales | Crate | Uso | |-------|-----| | `ratatui` + `crossterm` | Interfaz de terminal | | `mail-parser` | Parsing MIME/RFC 5322 | | `encoding_rs` | Decodificacion de charsets | | `chrono` | Fechas y zonas horarias | | `clap` | Linea de comandos | | `serde` + `bincode` | Serializacion del indice | | `sha2` | Integridad del indice | | `lru` | Cache de mensajes decodificados | | `tracing` | Logging estructurado | ## Patrocinadores `mboxshell` se desarrolla en abierto y cuenta con el apoyo de: <p align="center"> <a href="https://colorvivo.com"> <img src="https://assets.kitploit.com/production/public/readmes/11618/2e93d1557266a1757676dc70bf7e0bfb3ac1cbd1d1a6b5da72090b86ec7810eb.webp" alt="Colorvivo" height="70"> </a> <a href="https://www.stackscale.com"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://www.stackscale.com/wp-content/uploads/2019/12/Stackscale-GrupoAire-web-mini.png"> <img src="https://assets.kitploit.com/production/public/readmes/11618/c5e4c1de767e401b555b522b310441f54819b1fd904da12d910e73ff52a7070b.png" alt="Stackscale" height="50"> </picture> </a> </p> - **[Colorvivo](https://colorvivo.com)** — expertos en WordPress, IA y medios de comunicación. - **[Stackscale](https://www.stackscale.com)** — expertos en infraestructura cloud privado. Si tu empresa usa `mboxshell` y quiere apoyar su desarrollo, consulta [`.github/FUNDING.yml`](https://github.com/dcarrero/mboxshell/blob/main/.github/FUNDING.yml) o escribe a través de [carrero.es](https://carrero.es). ## Documentación El manual de usuario completo cubre todos los comandos, atajos de teclado, operadores de búsqueda, opciones de exportación y claves de configuración: - [docs/MANUAL-ES.md](https://github.com/dcarrero/mboxshell/blob/main/docs/MANUAL-ES.md) — Manual de usuario (Español) - [docs/MANUAL.md](https://github.com/dcarrero/mboxshell/blob/main/docs/MANUAL.md) — User manual (English) ## Changelog Consulta [CHANGELOG-ES.md](https://github.com/dcarrero/mboxshell/blob/main/CHANGELOG-ES.md) (English: [CHANGELOG.md](https://github.com/dcarrero/mboxshell/blob/main/CHANGELOG.md)) para el historial completo de versiones. ## Licencia [MIT](https://github.com/dcarrero/mboxshell/blob/main/LICENSE) - Copyright (c) 2026 David Carrero Fernandez-Baillo - [https://carrero.es](https://carrero.es) Codigo fuente: [https://github.com/dcarrero/mboxshell](https://github.com/dcarrero/mboxshell)