2019年9月2日 星期一

gmail 打包檔一片亂碼? 交給 hypermail 轉成 html

每年暑假例行的 gmail 打包下載, 抓回來解壓縮後的 *.mbox 檔都是一堆亂碼。 如果從頭到尾都是 base64 編碼的內容那也還容易處理 -- 就用 base64 -d 指令即可解碼。 最煩的是: 在 *.mbox 裡面, base64 編碼的內容混雜鑲嵌在正常 ascii 文字當中。 偶爾需要回頭找前幾年的信件, 就必須用 mutt -f abc.mbox 之類的方式, 把每個 *.mbox 逐一手動打開來檢查。 今年終於找到救星: hypermail。 原來過去十幾年來, W3C 一直拿它來做通信論壇歸檔管理。 因為太穩定了, 所以很久沒有更新了, 在 ubuntu 套件庫裡面找不到, 只好去 github 抓原始碼回來編譯。

它的編譯方式很老派也很簡單: 先執行 ./configure 然後 make, 順利的話, 幾分鐘後就會在 src/ 底下產生一個名為 hypermail 的可執行檔。 不過我遇到兩個小問題, 根據錯誤訊息, 以這兩步解決:

  1. 在 *ubuntu 底下, 要先安裝 build-essential 套件。 另外還要安裝 bison 或 byacc 套件以便提供 yacc 指令。 [2020/8/29] 在 mint 20 ulyana 上面, 還需要安裝 automake 跟 libtool 才能夠成功編譯出 src/pcre/.libs/libpcre.so* 。
  2. 把 src/Makefile.in 裡面的這一句:
    MISC_LIBS= -lm -lpcre -ltrio
    改成 MISC_LIBS= -lpcre -ltrio -lm 這是因為 ld 在連結時, 越底層的函式庫必須要放在越後面, 否則會出現 undefined reference 之類的錯誤。 只有長老輩才知道的冷知識。

改完後再重新 ./configuremake 就成功了。 把 src/hypermail 搬到 /usr/bin 底下、 把 src/pcre/.libs/libpcre.so* 搬到 /usr/lib 底下, 就可以測試一下了: hypermail -h。 使用方式如下: hypermail -m plurk.mbox -d plurk 這會讀取 plurk.mbox、把裡面的信拆成一封一封變成 .html 格式、 放在新建的目錄 plurk/ 底下, 順便建立各種索引檔 [分別按照時間/主題/作者排序]。

有了 utf8 編碼的 html 檔, 接下來要用其他文字工具處理就很簡單了。 最常借助 lynx -dump 把 html 變成純文字。 例如我有一堆來自噗浪的 mail, 以前都只在 gmail 裡設定自動加上標籤、 存檔, 然後就不知該怎麼分析。 學會用 hypermail 轉檔之後, 我就寫了一個簡單小程式 plk-ms.perl, 然後: for f in plurk/????.html ; do lynx -dump $f | plk-ms.perl ; done | sort > ~/plurk-summary.txt 得到所有郵件的日期時間、 那一噗的網址 (如果有的話)、 主旨等等資訊, 每封 mail 摘要在短短一列, 按時間排好順序放在 ~/plurk-summary.txt 裡面, 清爽!

沒有留言:

張貼留言

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。