mboxShell 1.0: a primeira versão estável, e tudo o que veio desde a 0.8
O mboxShell, nossa ferramenta de terminal de código aberto para arquivos MBOX, chega à 1.0 com um arquivo de configuração que finalmente faz o que diz. Contamos isso e o que trouxeram as quatro versões sobre as quais nunca escrevemos: exportação para Maildir, uma revisão de segurança, tema claro, caixas da Aruba e exportações numeradas.
O mboxShell, a ferramenta de terminal gratuita e com licença MIT da qual nasceu o Mbox Viewer, chegou hoje à 1.0.0. É a primeira versão estável, e o número tem um significado concreto: daqui em diante a linha de comando e o arquivo de configuração seguem o versionamento semântico, então qualquer mudança que quebre um script que você tenha escrito contra eles só pode chegar em uma 2.0.
A última vez que falamos dele foi em agosto, quando a 0.7.2 aprendeu a cortar uma caixa em outras menores. Desde então saíram seis versões. Uma delas, a 0.7.3, só atualizou um link; as outras cinco nunca ganharam artigo aqui. Este coloca tudo em dia.
1.0: o arquivo de configuração faz o que diz
A manchete honesta da 1.0 é uma correção. O mboxShell sempre leu um config.toml, e o README documentava uma longa lista de opções para ele — mas só quatro eram lidas de fato: o nível de log, o tema e as duas opções de anexos. default_sort, sort_order, date_format, layout, show_sidebar, csv_separator, cache_dir e as demais eram aceitas e depois ignoradas. Agora todas funcionam. As poucas que nunca tiveram nada por trás ([columns], [performance], default_format…) saíram; um arquivo antigo que ainda as tenha carrega sem reclamar.
Para facilitar encontrar o arquivo, há um comando novo, config:
$ mboxshell config path
/Users/you/Library/Application Support/mboxshell/config.toml
(not created yet: `mboxshell config defaults` prints a starting point)
config defaults mostra todas as opções com o valor padrão e um comentário, então mboxshell config defaults > "$(mboxshell config path)" deixa um arquivo pronto para você começar a editar. config show mostra o seu e avisa o que vai ignorar:
$ mboxshell config show
[general]
date_format = "%d/%m/%Y %H:%M"
sort_order = "upward"
Invalid value for general.sort_order: "upward"; using the default
Antes da 1.0, esse valor era descartado em silêncio — e um date_format malformado derrubava a interface. Agora cada valor inválido volta ao padrão com um aviso. E uma correção na documentação: no macOS o arquivo fica em ~/Library/Application Support/mboxshell/, e não em ~/.config/mboxshell/ como dizia o README.
0.8.0: uma revisão completa da ferramenta
A maior das versões que pulamos nasceu de ler a ferramenta inteira, de ponta a ponta, com uma única pergunta: o que acontece quando a caixa é hostil, está quebrada ou é simplesmente enorme?
Segurança. O sanitizador de HTML — a única coisa entre um e-mail hostil e o seu navegador quando você exporta para HTML ou aperta H — foi atualizado para fechar duas falhas de XSS já publicadas, e a integração contínua agora audita as dependências a cada build. As imagens remotas vêm bloqueadas por padrão nas exportações HTML, porque abrir a página as baixaria, e um pixel de rastreamento conta ao remetente quando e de onde o arquivo foi lido; a página informa quantas foram bloqueadas, e --allow-remote-images as traz de volta. Além disso, o índice, o CSV e os arquivos temporários agora são criados do zero e renomeados no lugar, então uma caixa entregue com um link simbólico plantado ao lado não consegue mais fazer um arquivo seu ser sobrescrito.
Mesclagem. A desduplicação tratava duas mensagens como iguais assim que compartilhavam um Message-ID. Isso significava que uma mensagem plantada antes nas entradas podia fazer uma legítima sumir do arquivo mesclado. Agora uma mensagem só é duplicada quando o Message-ID e o conteúdo coincidem. A mesclagem também passou a ler as entradas aos poucos, em vez de carregar cada uma inteira na memória.
Entrada ruim falha de forma visível. Um filtro de busca que não podia ser interpretado — after:2099-13-45, size:big — era descartado, então a busca devolvia tudo, e um export --query montado sobre ela exportava a caixa inteira. Agora é um erro. Um arquivo que nem é uma caixa de e-mail é rejeitado em vez de abrir como «0 mensagens», e uma caixa de 800 MB sem quebras de linha agora é indexada com cerca de 20 MB de RAM em vez de 816.
Acessibilidade. O ajuste theme finalmente funciona: light é novo, com todas as cores de texto em contraste WCAG AA ou melhor, e terminal não usa cores próprias, então segue a paleta do seu terminal (NO_COLOR o força). A mensagem selecionada é marcada com > e o filtro ativo com •, para que nenhum dos dois dependa de cor. E o cursor real do terminal agora acompanha o foco, que é o que leitores de tela, linhas braille e ampliadores de tela acompanham.
Exportação para Maildir. export --format maildir grava uma pasta padrão com cur/ new/ tmp/, funciona com --query e transforma as marcas de lida e com estrela — incluindo os marcadores Opened e Starred do Gmail — em flags do Maildir:
$ mboxshell export INBOX --format maildir --output ./INBOX-maildir
Exporting 2 message(s) (maildir) → ./INBOX-maildir
Exported to Maildir ./INBOX-maildir (2 message(s))
Com isso, os formatos que o mboxShell grava são MBOX, Maildir, EML, CSV, TXT e HTML.
0.8.1 e 0.8.2: pequenas correções que vieram do GitHub
As caixas do webmail da Aruba abriam como uma única mensagem. A Aruba escreve a linha que separa as mensagens com um formato de data moderno em vez do clássico, e o mboxShell só reconhecia o clássico. Agora aceita os dois — com rigor suficiente para que uma linha do corpo que cite uma data continue sem partir uma mensagem em duas.
Pastas e arquivos numerados. attachments --dirname seq-no dá à pasta de cada mensagem o nome da sua posição na caixa — 0007/ — em vez da data e do assunto, que, com fusos horários e assuntos truncados, eram difíceis de associar de volta à mensagem. O número é o mesmo index que search --json informa. stats agora também conta as mensagens sem Message-ID: quando dá 0 e não há duplicadas, o Message-ID é uma chave única segura para aquela caixa.
Exportações HTML prontas para virar um único PDF. Cada página exportada começa com um título oculto e uma marca invisível. Convertidas com o wkhtmltopdf e juntadas em um só PDF, cada e-mail ganha o próprio marcador, e a marca mostra onde dividi-lo de novo.
A 0.8.2 é uma correção só: a exportação podia fechar o programa ao encontrar uma mensagem cujo assunto ou remetente tivesse uma letra acentuada perto do início. A verificação de nomes de arquivo reservados do Windows (CON, NUL…) adicionada na 0.8.0 cortava o nome em um byte fixo, que pode cair no meio de um é. Afetava todas as plataformas, não só o Windows.
0.9.0: exportações que batem com os anexos
export agora aceita a mesma opção --dirname seq-no, então 0007.html e a pasta 0007/ com os anexos dele pertencem à mesma mensagem. A numeração é calculada sobre a caixa inteira mesmo quando --query seleciona só uma parte, então export e attachments sempre concordam.
Ela também corrige a primeira mensagem de uma caixa que começa com uma marca de ordem de bytes UTF-8 (BOM). Essa mensagem era exportada com a linha separadora confundida com um cabeçalho, então perdia o assunto e era salva como unknown_unknown.
O que não mudou
O mboxShell continua abrindo caixas de qualquer tamanho, continua sem nunca gravar no arquivo que lê e continua funcionando totalmente offline. A página do mboxShell tem os binários prontos para Linux, macOS, FreeBSD e Windows, os comandos e as notas de cada versão; o histórico completo está no changelog do repositório no GitHub.
E se você prefere clicar a digitar, a mesma ideia vive no Mbox Viewer para Mac e Windows, gratuito para caixas de até 1 GB.
Abra seu arquivo com o Mbox Viewer
App nativo para Mac e Windows. Processa arquivos MBOX e EML de qualquer tamanho, totalmente offline.