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

これでフォルダ一覧の中に tmp フォルダができるはずです。あとはメールを受信トレイなどにコピーして tmp フォルダを削除すれば OK 。 nPOP Ver 1.0.1 & Thunderbird バージョン 1.5 (20051201) で動作確認しました。

メモ

  • Thunderbird のメールボックス形式は Unix mbox 形式らしい。
    • From - #{日付}がメール一通一通の区切り?
    • 面倒なので RFC 読んでません。
  • nPOP のデータは独自形式に見える。
    • メールの区切りは .(ピリオド)だけの行?