mboxShell 1.0:初の安定版と、0.8以降に入ったすべて
MBOXファイルのためのオープンソースのターミナルツールmboxShellが1.0になり、設定ファイルがようやく書いてあるとおりに動くようになりました。そのことと、ここで取り上げてこなかった4つのリリースの中身をまとめます。Maildirへの書き出し、セキュリティの見直し、ライトテーマ、Arubaのメールボックス、番号付きの書き出しです。
Mbox Viewerの出発点になった、無料でMITライセンスのターミナルツール mboxShell が、今日 1.0.0 になりました。初の安定版で、この番号には具体的な意味があります。ここから先、コマンドラインと設定ファイルはセマンティック バージョニングに従います。それらを相手に書いたスクリプトを壊すような変更は、2.0でしか入りません。
前回取り上げたのは8月、0.7.2が メールボックスを小さなメールボックスに切り分ける ようになったときでした。それ以来6つのリリースが出ています。そのうち0.7.3はリンクを1つ直しただけで、残りの5つはここで記事にしていません。この記事でまとめて追いつきます。
1.0:設定ファイルが書いてあるとおりに動く
1.0の見出しを正直に言えば、不具合の修正です。mboxShellは以前から config.toml を読んでいて、READMEにはそのための長いオプション一覧が載っていました。ところが実際に読まれていたのは4つだけ。ログレベル、テーマ、添付ファイルの2つのオプションです。default_sort、sort_order、date_format、layout、show_sidebar、csv_separator、cache_dir などは受け付けたうえで無視されていました。いまはすべて効きます。中身が一度も実装されなかったいくつか([columns]、[performance]、default_format…)は削除しました。それらがまだ残っている古いファイルも、文句を言わずに読み込みます。
ファイルを見つけやすくするため、新しい config コマンドを用意しました。
$ mboxshell config path
/Users/you/Library/Application Support/mboxshell/config.toml
(not created yet: `mboxshell config defaults` prints a starting point)
config defaults はすべてのオプションを既定値とコメント付きで出力するので、mboxshell config defaults > "$(mboxshell config path)" で編集の出発点になるファイルができます。config show はいまのファイルを表示し、無視される値を指摘します。
$ mboxshell config show
[general]
date_format = "%d/%m/%Y %H:%M"
sort_order = "upward"
Invalid value for general.sort_order: "upward"; using the default
1.0より前は、この値は黙って捨てられていました。しかも形式の崩れた date_format はインターフェースを落としていました。いまは不正な値はそれぞれ既定値に戻り、警告が出ます。ドキュメントの訂正も1つあります。macOSでファイルがあるのは ~/Library/Application Support/mboxshell/ で、READMEに書かれていた ~/.config/mboxshell/ ではありません。
0.8.0:ツール全体の見直し
取り上げそびれたリリースのうち最大のものは、ツールを端から端まで読み直したところから生まれました。問いは1つだけです。メールボックスが悪意のあるもの、壊れたもの、あるいは単に巨大なものだったら、何が起きるか。
セキュリティ。 HTMLのサニタイザーは、HTMLに書き出すときや H を押したときに、悪意のあるメールとブラウザーのあいだにある唯一の防壁です。これを更新して公開済みの2件のXSS脆弱性を塞ぎ、CIはビルドのたびに依存関係を監査するようになりました。HTMLの書き出しでは、外部画像を既定でブロックします。ページを開くと画像が取得され、トラッキングピクセルがアーカイブをいつ、どこから読んだかを送信者に伝えてしまうからです。ページにはブロックした数が表示され、--allow-remote-images で元に戻せます。さらに、インデックス、CSV、一時ファイルは新規に作成してから所定の場所へ改名するようになりました。そのため、仕込まれたシンボリックリンクを添えて届いたメールボックスが、あなたのファイルを上書きさせることはもうできません。
結合。 重複排除 は、2通のメッセージが同じ Message-ID を持っていれば、それだけで同一と見なしていました。つまり、入力の前のほうに仕込まれたメッセージが、正当なメッセージを結合後のアーカイブから消せてしまったのです。いまはMessage-IDと内容の 両方 が一致したときだけ重複になります。結合は、各入力を丸ごとメモリに読み込むのではなく、ストリームで処理するようにもなりました。
不正な入力ははっきり失敗する。 読み取れない検索フィルター(after:2099-13-45、size:big)は以前は捨てられていたため、検索は すべて を返し、それを使った export --query はメールボックス全体を書き出していました。いまはエラーになります。そもそもメールボックスではないファイルは「0件のメッセージ」として開くのではなく拒否し、改行のない800 MBのメールボックスは、816 MBではなく約20 MBのRAMでインデックスを作れるようになりました。
アクセシビリティ。 theme の設定がようやく効くようになりました。light は新しく、文字色はすべてWCAG AA以上のコントラストです。terminal は独自の色を使わず、ターミナルのパレットに従います(NO_COLOR で強制できます)。選択中のメッセージには >、有効なフィルターには • が付くので、どちらも色に頼りません。そしてターミナルの本物のカーソルがフォーカスに追従するようになりました。スクリーンリーダー、点字ディスプレイ、拡大鏡が追っているのはこのカーソルです。
Maildir への書き出し。 export --format maildir は標準的な cur/ new/ tmp/ のフォルダーを書き出し、--query と組み合わせられ、既読とスターの印を(Gmailの Opened と Starred ラベルも含めて)Maildirのフラグに変換します。
$ mboxshell export INBOX --format maildir --output ./INBOX-maildir
Exporting 2 message(s) (maildir) → ./INBOX-maildir
Exported to Maildir ./INBOX-maildir (2 message(s))
これで、mboxShellが書き出せる形式はMBOX、Maildir、EML、CSV、TXT、HTMLになりました。
0.8.1と0.8.2:GitHubから届いた小さな修正
Arubaのウェブメールのメールボックスが、1通のメッセージとして開いていました。 Arubaはメッセージを区切る行を、従来の日付形式ではなく新しい日付形式で書きます。mboxShellが認識していたのは従来の形式だけでした。いまは両方を受け付けます。ただし、本文中で日付を引用している行がメッセージを2つに割ってしまわない程度に厳密にです。
番号付きのフォルダーとファイル。 attachments --dirname seq-no は、各メッセージのフォルダーに、日付と件名ではなくメールボックス内での位置にちなんだ名前を付けます(0007/)。日付と件名では、タイムゾーンや切り詰められた件名のせいで、元のメッセージと突き合わせにくかったのです。この番号は search --json が返すのと同じ index です。stats はMessage-IDのないメッセージも数えるようになりました。それが0で重複もなければ、そのメールボックスではMessage-IDを一意のキーとして安心して使えます。
1つのPDFにまとめられるHTMLの書き出し。 書き出した各ページは、非表示の見出しと目に見えない目印で始まります。wkhtmltopdfで変換して1つのPDFにまとめると、メールごとに独自のしおりが付き、目印はどこで分け直せばいいかを示します。
0.8.2 は修正1件だけです。件名や差出人の先頭近くにアクセント付きの文字があるメッセージで、書き出しが異常終了することがありました。0.8.0で加えた、Windowsの予約ファイル名(CON、NUL…)のチェックが名前を決まったバイト位置で切っていて、それが é の途中に当たることがあったのです。影響はWindowsだけでなく、すべてのプラットフォームに及んでいました。
0.9.0:添付ファイルとそろう書き出し
export も同じ --dirname seq-no オプションを受け付けるようになり、0007.html と、その添付ファイルを収めたフォルダー 0007/ が同じメッセージのものになります。番号は、--query が一部しか選んでいなくてもメールボックス全体で数えるので、export と attachments は常に一致します。
また、UTF-8のバイトオーダーマーク(BOM)で始まるメールボックスの最初のメッセージも直しました。そのメッセージは区切り行をヘッダーと取り違えたまま書き出されていたため、件名を失い、unknown_unknown として保存されていました。
変わらないこと
mboxShellは今もどんなサイズのメールボックスでも開き、今も読み込んだファイルには決して書き込まず、今も完全にオフラインで動きます。mboxShellのページ に、Linux、macOS、FreeBSD、Windows向けのビルド済みバイナリ、コマンド、リリースノートがあります。完全な履歴はGitHubのリポジトリの変更履歴にあります。
そして、入力するよりクリックしたいなら、同じ考え方がMac・Windows用のMbox Viewerにあります。1 GBまでのメールボックスなら無料です。
Mbox Viewer でアーカイブを開く
Mac と Windows のネイティブ アプリ。あらゆるサイズの MBOX・EML ファイルを完全にオフラインでストリーミングします。