WinbiffからThunderbirdへの移行

  • 投稿日:
  • by
  • カテゴリ:

いつかやろうとずっと考えていながら、なかなか実行に移せなかったWinbiffからThunderbirdへの移行をやっと終えた。Winbiffは90年代半ばから使い続けているソフトで、リッチなことはできないながらも、とても使い勝手が良くて気に入っていた。しかし、販売とサポートが終わってしまった今、この先のことを考えると、ディスコンになったソフトを使い続けるのは少々不安だ。

そんなわけで、ネットでいくつか見つけることができるmbox形式での移行だけでは完璧にいかない部分のTipsを交えつつ、移行手順をまとめてみた。

移行するものは、メールそのものとアドレス帳の2つ。
メールは、対象のフォルダーを選択した状態で[ツール]メニューのエクスポートをクリックし、ファイル形式としてwinbiff形式ではなくmbox形式を選ぶ必要がある。winbiff形式を選択すると、エクスポートされるファイルには拡張子は付かなくて、mbox形式だとmbxという拡張子が付くので見た目で判断しやすい。

Thunderbird側では、アドインとしてImportExportToolsをインストールしておく。

ローカルフォルダを右クリックして、mboxファイルをインポートを選択し、既定の設定のままOKをクリックして、エクスポート済みのmboxファイルを選択する。

これだけで、"フォルダ名.mbx"というフォルダがThunderbirdに作られてインポートされるので、最短ではこれで終了ということになる。しかし、これが日本語のメールだとこんなに簡単ではなくて、もうひと手間かけないと文字化けして読めないので注意が必要だ。

Winbiffのバージョンによって違う可能性があるものの、最終バージョンの2.51では、

charset=ISO-2022-JP かつ、content-transfer-encoding: 7bit

の本文だけをShift-JISの文字に変換して保存するようになっている。エクスポートしたmboxファイルをテキストエディタで開いてみるとわかるけど、そのまま平文で読めるShift-JISに変換済みのものと、日本語のメールなのに、そのままでは読めない形式とが入り混じっているのがそれ。

この中でも、WinbiffからThunderbirdへの移行で対処が必要なのはそのまま読めるメール。これは、Winbiffが受信したときにISO-2022-JPなどの文字コードを、日本語Windowsの既定の文字コードであるShift_JISに変換して保存してしまっているもので、SMTPのヘッダーに記録されているCharset=ISO-2022-JPとは矛盾した状態にある。Shift_JISに変換してくれるのは、これはこれで効率がいいからWinbiffだけを使う分にはいいんだけど、移行するときに躓く罠になる一面もある。
困ったことに、Thunderbirdはヘッダーに書かれている文字コードを完全に信じ込んでインポートするらしく、そのまま取り込むとデータロスすることを一切考慮していない。ので、インポートする前に、メールのヘッダーにあるCharset=ISO-2022-JPの部分をCharset=Shift_JISに書き換える必要が出てくる。

ただ、機械的にエディタで置き換えるだけだと、content-transfer-encodingが7bit以外のISO-2022-JPのメールのヘッダーまでShift_JISで置き換えてしまって、それはそれで文字化けしてしまうんで、自分が受信しているメールの傾向を見つつ、トライアンドエラーで成功率が高い置き換える方法を編み出す必要がある。

経験的には、秀丸の置換で正規表現を有効にして

Charset="?iso-2022-jp"?をCharset="shift_jis"

で一括して置き換えた上で、Shift_JISで置き換えてはいけないメールを救済するために、再度別の置換方法で置き換えなおす方法でほぼ100%問題なくインポートできるようだ。

では、具体的にどういうメールに気をつけなければいけないか、例を挙げてみたい。

まず、マルチパートでテキスト形式とHTML形式の両方が含まれるメール。(multipart/alternative)
表示するメールソフト側で好きなほうを表示すればいいというもの。HTMLメールに対応しているソフトの場合、大概は優先的にHTML側が表示されるはず。なぜなら、HTML形式のほうが情報量が多いから。(Thunderbirdも然り)
この例では、テキストもHTMLもISO-2022-JPで、content-transfer-encodingは7bitが使われているので、Winbiffによって日本語がShift_JISに変換されているため、平文として読み取れるようになっている。この場合は一律Shift_JISに変換したままで問題なし。何もする必要がない。

 

以下の例では、テキスト形式の本文はISO-2022-JPの文字コードで、content-transfer-encodingは7bitなので、WinbiffによってShift_JISの文字に変換されている。この本文に関してはcharset=Shift_JISに直す必要がある。
HTMLパートは、charset=ISO-2022-JPと同じだけど、content-transfer-encodingがquoted-printableになっている。これは、メールの本文は76文字で折り返すことが推奨されているというRFCの定義に従うことで、HTMLのタグが途中で改行されてしまわないようにするための対処で(タグの途中で改行されると、タグがタグとして認識されなくなってしまうので)、quoted-printableでエンコードされているものは、一度quoted-printableでデコードする際に途中の改行を除去できるので、RFCに従って76文字で改行を入れられるようにするというもの。
つまり、この例では、HTMLパートは文字がShift_JISに変換されていないので、charset=iso-2022-jpはShift_JISに置き換えてはいけない。パートごとに置換していいものと悪いものがあるというわけ。なので、HTMLパートだけヘッダーを元にもどしてやらなければならない。面倒だけど。

秀丸で置換する場合は、改行を含めて置換しなおす必要がある。一度一括でcharset=shift_jisに置き換えてしまったものだけを元に戻すために、、

charset=shift_jis\ncontent-transfer-encoding: quoted-printable

charset=iso-2022-jp\ncontent-transfer-encoding: quoted-printable

で置き換えれば元に戻るはず。

これも同じ。content-transfer-encodingとしてquoted-printableではなくBase64という方式が使用されている。
Base64の場合、QPとは違ってタグも読み取ることができなくなる。当然、この意味不明なデータの中に書かれている文字コードもISO-2022-JPのままなので、Shift_JISに一括置換したヘッダーをISO-2022-JPに戻さないといけない。やり方はQPの場合と同じで、改行を含めて正規表現で置換する。quoted-printableだったところをbase64に置き換えるだけ。

これはシングルパートのテキスト形式のメール。本文はいまどき珍しくShift_JISで書かれていて、さらに、8bit文字をそのまま送りつけるcontent-transfer-encoding: 8bitが指定されている。これも一切変更の必要なし。(元々、ISO-2022-JPしか置換対象じゃないんで関係ない)

これは文字コードとしてUTF-8(Unicode)が使われている。しかも、これもcontent-transfer-encodingが8bitなので、Shift_JISのつもりでエディタで読み取ると文字化けして表示されてしまう。ただ、これもISO-2022-JPではないんで対象外。そのままにしてインポートして問題なし。

mboxファイル全体に対して最初に一括置換するときの例は以下の通り。まずこれを一度実施してから、上記例外パターンを元に戻す必要がある。

メール本文のインポートが終わったら、残りはアドレス帳。
Winbiffでcsv形式でエクスポートしたら、Thunderbirdでインポートするわけだけど、そのとき、エクスポートされたデータの各列が何に相当するかをThunderbirdに教えてやらなければならない。基本的には、表示名、メールアドレスの順になっていると思うんで、上下のボタンでフィールドをこんな風にあわせてやればいいだけ。

間違い、不明点はコメントでどうぞ。