Skip to content
Mbox Viewer Pro
announcementproductmboxshell

mboxShell 1.0: 첫 안정 버전, 그리고 0.8 이후 달라진 모든 것

MBOX 파일을 위한 오픈 소스 터미널 도구 mboxShell이 1.0이 되었고, 설정 파일이 마침내 적힌 대로 동작합니다. 그 이야기와 함께, 그동안 글로 다루지 않은 네 번의 릴리스가 가져온 것도 정리합니다. Maildir 내보내기, 보안 점검, 밝은 테마, Aruba 사서함, 번호가 매겨진 내보내기입니다.

David Carrero ·

Mbox Viewer가 태어난 바탕인 무료 MIT 라이선스 터미널 도구 mboxShell이 오늘 1.0.0이 되었습니다. 첫 안정 버전이고, 이 번호에는 구체적인 뜻이 있습니다. 이제부터 명령줄과 설정 파일은 유의적 버전(Semantic Versioning)을 따르므로, 여러분이 이것들을 대상으로 작성한 스크립트를 깨뜨릴 변경은 2.0에서만 들어올 수 있습니다.

마지막으로 다룬 것은 8월, 0.7.2가 사서함을 더 작은 사서함들로 나누는 법을 익혔을 때였습니다. 그 뒤로 여섯 번의 릴리스가 나왔습니다. 그중 0.7.3은 링크 하나만 고쳤고, 나머지 다섯은 여기서 글로 다룬 적이 없습니다. 이 글에서 밀린 것을 따라잡습니다.

1.0: 설정 파일이 적힌 대로 동작합니다

솔직히 말해 1.0의 핵심은 버그 수정입니다. mboxShell은 원래부터 config.toml을 읽었고, README에는 이 파일의 옵션이 길게 문서화되어 있었습니다. 그런데 실제로 읽히는 것은 네 개뿐이었습니다. 로그 수준, 테마, 그리고 첨부 파일 옵션 두 개입니다. 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은 인터페이스를 멈춰 세웠습니다. 이제는 잘못된 값마다 경고와 함께 기본값으로 돌아갑니다. 문서도 하나 바로잡았습니다. macOS에서 이 파일은 README에 적힌 ~/.config/mboxshell/이 아니라 ~/Library/Application Support/mboxshell/에 있습니다.

0.8.0: 도구 전체 점검

건너뛴 릴리스 가운데 가장 큰 것은 도구를 처음부터 끝까지 다시 읽으며 던진 질문 하나에서 나왔습니다. 사서함이 악의적이거나, 망가졌거나, 그냥 거대하다면 무슨 일이 일어날까?

보안. HTML 새니타이저는 HTML로 내보내거나 H를 누를 때 악의적인 메일과 여러분의 브라우저 사이에 놓인 유일한 장치입니다. 이것을 업데이트해 공개된 XSS 취약점 두 건을 막았고, 이제 CI가 빌드할 때마다 의존성을 감사합니다. HTML 내보내기에서는 원격 이미지가 기본적으로 차단됩니다. 페이지를 열면 이미지를 불러오게 되고, 추적 픽셀이 보낸 사람에게 아카이브를 언제, 어디서 읽었는지 알려 주기 때문입니다. 페이지에는 몇 개를 차단했는지 표시되며, --allow-remote-images로 되살릴 수 있습니다. 또 색인, CSV, 임시 파일은 이제 새로 만든 뒤 제자리로 이름을 바꿔 넣습니다. 그래서 심어 둔 심볼릭 링크를 곁에 달고 온 사서함이 여러분의 파일을 덮어쓰게 만들 수 없습니다.

병합. 중복 제거는 두 메시지가 같은 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 웹메일의 사서함이 메시지 하나로 열렸습니다. Aruba는 메시지를 나누는 줄을 고전적인 날짜 형식 대신 현대적인 날짜 형식으로 쓰는데, mboxShell은 고전적인 형식만 알아봤습니다. 이제는 둘 다 받아들입니다. 그래도 본문에서 날짜를 인용한 줄이 메시지를 둘로 쪼개지 않을 만큼은 엄격합니다.

번호가 매겨진 폴더와 파일. attachments --dirname seq-no는 각 메시지의 폴더 이름을 날짜와 제목 대신 사서함 안에서의 위치로 붙입니다(0007/). 날짜와 제목으로는 시간대와 잘린 제목 때문에 원래 메시지와 맞춰 보기가 어려웠습니다. 이 번호는 search --json이 알려 주는 것과 같은 index입니다. stats는 이제 Message-ID가 없는 메시지도 셉니다. 그 수가 0이고 중복도 없다면, 그 사서함에서는 Message-ID를 안전한 고유 키로 쓸 수 있습니다.

하나의 PDF로 만들 준비가 된 HTML 내보내기. 내보낸 각 페이지는 숨겨진 제목과 보이지 않는 표식으로 시작합니다. wkhtmltopdf로 변환해 PDF 하나로 합치면 메일마다 자기 책갈피가 생기고, 표식은 어디서 다시 나누면 되는지 알려 줍니다.

0.8.2는 수정 하나뿐입니다. 제목이나 보낸 사람의 앞부분에 악센트 붙은 글자가 있는 메시지에서 내보내기가 비정상 종료될 수 있었습니다. 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 파일을 완전히 오프라인으로 스트리밍합니다.