nPOP メールボックスを Thunderbird に移行する Ruby スクリプト
nPOP はメールサーバのデータ管理に便利な軽量メーラーです。サーバ上から特定のメールを削除したり、メールの先頭だけを取得したりといった比較的低レベルのメール操作に威力を発揮します。
今日は訳あって nPOP でダウンロードしたメールデータをメインメーラーの Thunderbird に取り込む必要があったのですが、 google:npop thunderbird 移行] や [google:npop thunderbird 乗り換え で調べた限りでは、データ移行の方法が見つかりませんでした。というわけで、 MailBox*.dat を直接眺めて、それらしい変換スクリプトを書いてみました。動作無保証です。
npop2Thunderbird.rb
require 'delegate' require 'time' require 'nkf' class NPopData < SimpleDelegator def initialize super([]) end attr_accessor:time def put_data(out) out.puts "From - #{@time.rfc822}" each {|l| out.puts NKF.nkf( '-j', l ) } clear() end end d = NPopData.new while line = gets if /^\.$/ =~ line d.put_data(STDOUT) elsif /^Date\: (.+)$/ =~ line t = Time::parse($1) d.time = t else d.push line end end d.put_data(STDOUT)
使い方
- Thunderbird を一旦終了させる。
- nPOP でメールを取り込む。
- スクリプトの引数にメールボックスファイルを指定する。標準出力に変換結果を吐くので適宜リダイレクト。
ruby npop2Thunderbird.rb MailBox0.dat > tmp
- Thunderbird のメールボックスフォルダに一時ファイル tmp を置く。
- Thunderbird 起動。
これでフォルダ一覧の中に tmp フォルダができるはずです。あとはメールを受信トレイなどにコピーして tmp フォルダを削除すれば OK 。 nPOP Ver 1.0.1 & Thunderbird バージョン 1.5 (20051201) で動作確認しました。
メモ
- Thunderbird のメールボックス形式は Unix mbox 形式らしい。
- From - #{日付}がメール一通一通の区切り?
- 面倒なので RFC 読んでません。
- nPOP のデータは独自形式に見える。
- メールの区切りは .(ピリオド)だけの行?