Skip to content
Mbox Viewer Pro
announcementproductmboxshell

mboxShell 1.0: pierwsza stabilna wersja i wszystko, co przyszło od 0.8

mboxShell, nasze otwartoźródłowe narzędzie terminalowe do plików MBOX, dochodzi do wersji 1.0 z plikiem konfiguracyjnym, który wreszcie robi to, co obiecuje. Opisujemy to i to, co przyniosły cztery wydania, o których nie pisaliśmy: eksport do Maildir, przegląd bezpieczeństwa, jasny motyw, skrzynki z Aruby i numerowane eksporty.

David Carrero ·

mboxShell, darmowe narzędzie terminalowe na licencji MIT, z którego wyrósł Mbox Viewer, doszło dziś do wersji 1.0.0. To pierwsze stabilne wydanie, a numer znaczy coś konkretnego: od teraz wiersz poleceń i plik konfiguracyjny trzymają się wersjonowania semantycznego, więc wszystko, co mogłoby zepsuć napisany przez ciebie skrypt, może przyjść dopiero w wersji 2.0.

Ostatnio pisaliśmy o nim w sierpniu, kiedy 0.7.2 nauczyła się dzielić skrzynkę na mniejsze. Od tamtej pory wyszło sześć wydań. Jedno z nich, 0.7.3, zmieniło tylko odnośnik; pozostałe pięć nie doczekało się tu wpisu. Ten nadrabia zaległości.

1.0: plik konfiguracyjny robi to, co obiecuje

Uczciwie mówiąc, najważniejsza rzecz w 1.0 to poprawka błędu. mboxShell od zawsze czytał plik config.toml, a README opisywało dla niego długą listę opcji — tyle że naprawdę czytane były tylko cztery: poziom logowania, motyw i dwie opcje załączników. default_sort, sort_order, date_format, layout, show_sidebar, csv_separator, cache_dir i reszta były akceptowane, a potem ignorowane. Teraz działają wszystkie. Kilka, za którymi nigdy nic nie stało ([columns], [performance], default_format…), znika; stary plik, który wciąż je zawiera, wczytuje się bez protestów.

Żeby plik łatwo było znaleźć, jest nowe polecenie config:

$ mboxshell config path
/Users/you/Library/Application Support/mboxshell/config.toml
(not created yet: `mboxshell config defaults` prints a starting point)

config defaults wypisuje wszystkie opcje z wartościami domyślnymi i komentarzem, więc mboxshell config defaults > "$(mboxshell config path)" daje ci plik, od którego możesz zacząć edycję. config show wypisuje twój plik i zaznacza, co zostanie zignorowane:

$ mboxshell config show
[general]
date_format = "%d/%m/%Y %H:%M"
sort_order = "upward"
Invalid value for general.sort_order: "upward"; using the default

Przed 1.0 taka wartość była po cichu pomijana — a błędnie zapisany date_format wywracał interfejs. Teraz każda zła wartość wraca do domyślnej z ostrzeżeniem. I jedna poprawka w dokumentacji: na macOS plik leży w ~/Library/Application Support/mboxshell/, a nie w ~/.config/mboxshell/, jak twierdziło README.

0.8.0: pełny przegląd narzędzia

Największe z pominiętych wydań wzięło się z przeczytania całego narzędzia od początku do końca z jednym pytaniem: co się dzieje, gdy skrzynka jest wroga, uszkodzona albo po prostu ogromna?

Bezpieczeństwo. Sanityzator HTML — jedyne, co stoi między wrogim e-mailem a twoją przeglądarką, gdy eksportujesz do HTML albo naciskasz H — został zaktualizowany tak, by załatać dwie opublikowane podatności XSS, a CI sprawdza teraz zależności przy każdej kompilacji. Zdalne obrazy są w eksportach HTML domyślnie blokowane, bo otwarcie strony by je pobrało, a piksel śledzący mówi nadawcy, kiedy i skąd czytano archiwum; strona podaje, ile ich zablokowano, a --allow-remote-images przywraca je z powrotem. Do tego indeks, CSV i pliki tymczasowe są teraz tworzone od nowa i dopiero potem przenoszone na miejsce, więc skrzynka dostarczona z podrzuconym obok dowiązaniem symbolicznym nie może już doprowadzić do nadpisania któregoś z twoich plików.

Scalanie. Deduplikacja traktowała dwie wiadomości jako te same, gdy tylko miały wspólny Message-ID. To znaczyło, że wiadomość podrzucona wcześniej w danych wejściowych mogła sprawić, że prawdziwa zniknie ze scalonego archiwum. Teraz wiadomość jest duplikatem tylko wtedy, gdy zgadza się Message-ID i treść. Scalanie czyta też dane wejściowe strumieniowo, zamiast wczytywać każdy plik w całości do pamięci.

Złe dane kończą się wyraźnym błędem. Filtr wyszukiwania, którego nie dało się odczytać — after:2099-13-45, size:big — był pomijany, więc wyszukiwanie zwracało wszystko, a oparty na nim export --query eksportował całą skrzynkę. Teraz to błąd. Plik, który w ogóle nie jest skrzynką, zostaje odrzucony, zamiast otwierać się jako „0 wiadomości”, a skrzynka 800 MB bez znaków nowej linii indeksuje się teraz w około 20 MB RAM-u zamiast 816.

Dostępność. Ustawienie theme wreszcie działa: light jest nowy, z każdym kolorem tekstu w kontraście WCAG AA lub lepszym, a terminal nie używa własnych kolorów, więc trzyma się palety twojego terminala (NO_COLOR go wymusza). Zaznaczona wiadomość jest oznaczona >, a aktywny filtr •, więc żadne z nich nie zależy od koloru. A prawdziwy kursor terminala podąża teraz za fokusem, czyli za tym, co śledzą czytniki ekranu, monitory brajlowskie i lupy ekranowe.

Eksport do Maildir. export --format maildir zapisuje standardowy folder z cur/ new/ tmp/, działa z --query i zamienia oznaczenia przeczytanych i oznaczonych gwiazdką — łącznie z etykietami Gmaila Opened i Starred — na flagi Maildir:

$ mboxshell export INBOX --format maildir --output ./INBOX-maildir
  Exporting 2 message(s) (maildir) → ./INBOX-maildir
  Exported to Maildir ./INBOX-maildir (2 message(s))

Tym samym mboxShell zapisuje w formatach MBOX, Maildir, EML, CSV, TXT i HTML.

0.8.1 i 0.8.2: drobne poprawki, które przyszły z GitHuba

Skrzynki z poczty webowej Aruby otwierały się jako jedna wiadomość. Aruba zapisuje wiersz oddzielający wiadomości w nowoczesnym formacie daty zamiast klasycznego, a mboxShell rozpoznawał tylko klasyczny. Teraz przyjmuje oba — na tyle rygorystycznie, że wiersz treści cytujący datę nadal nie dzieli wiadomości na dwie.

Numerowane foldery i pliki. attachments --dirname seq-no nazywa folder każdej wiadomości według jej pozycji w skrzynce — 0007/ — zamiast według daty i tematu, które przez strefy czasowe i ucięte tematy trudno było dopasować z powrotem do wiadomości. Numer to ten sam index, który podaje search --json. stats liczy teraz też wiadomości bez Message-ID: gdy wychodzi 0 i nie ma duplikatów, Message-ID jest bezpiecznym unikalnym kluczem dla tej skrzynki.

Eksporty HTML gotowe do złożenia w jeden PDF. Każda wyeksportowana strona zaczyna się od ukrytego nagłówka i niewidocznego znacznika. Po konwersji wkhtmltopdf i złączeniu w jeden PDF każdy e-mail dostaje własną zakładkę, a znacznik pokazuje, gdzie go znów podzielić.

0.8.2 to jedna poprawka: eksport mógł się wysypać na wiadomości, której temat albo nadawca miał literę ze znakiem diakrytycznym blisko początku. Sprawdzanie zarezerwowanych nazw plików Windowsa (CON, NUL…), dodane w 0.8.0, ucinało nazwę na stałym bajcie, który może wypaść w środku é. Dotyczyło to wszystkich platform, nie tylko Windowsa.

0.9.0: eksporty, które zgadzają się z załącznikami

export przyjmuje teraz tę samą opcję --dirname seq-no, więc 0007.html i folder 0007/ z jego załącznikami należą do tej samej wiadomości. Numeracja jest liczona dla całej skrzynki, nawet gdy --query wybiera tylko jej część, więc export i attachments zawsze się zgadzają.

To wydanie poprawia też pierwszą wiadomość skrzynki, która zaczyna się od znacznika kolejności bajtów UTF-8 (BOM). Ta wiadomość była eksportowana z wierszem separatora wziętym za nagłówek, więc traciła temat i zapisywała się jako unknown_unknown.

Co się nie zmieniło

mboxShell nadal otwiera skrzynki dowolnej wielkości, nadal nigdy nie zapisuje do pliku, który czyta, i nadal działa całkowicie offline. Na stronie mboxShell są gotowe pliki binarne dla Linuksa, macOS, FreeBSD i Windowsa, polecenia i informacje o wydaniach; pełna historia jest w dzienniku zmian repozytorium na GitHubie.

A jeśli wolisz klikać niż pisać, ta sama idea żyje w Mbox Viewer dla Maca i Windowsa, za darmo dla skrzynek do 1 GB.

Otwórz swoje archiwum w Mbox Viewer

Natywna aplikacja na Maca i Windows. Strumieniuje pliki MBOX i EML dowolnej wielkości, w pełni offline.