Computingいつかやろうとずっと考えていながら、なかなか実行に移せなかったWinbiffからThunderbirdへの移行をやっと終えた。Winbiffは90年代半ばから使い続けているソフトで、リッチなことはできないながらも、とても使い勝手が良くて気に入っていた。販売とサポートが終わってしまった今、この先のことを考えると、ディスコンになったソフトを使い続けるのは少々不安だ。そんなわけで、ネットでいくつか見つけることができるmbox形式での移行だけでは完璧にいかない部分のTipsを交えつつ、移行手順をまとめてみた。移行するものは、メールそのものとアドレス帳の2つ。メールは、対象のフォルダーを選択した状態で[ツール]メニューのエクスポートをクリックし、ファイル形式としてwinbiff形式ではなくmbox形式を選ぶ必要がある。winbiff形式を選択すると、エクスポートされるファイルには拡張子は付かなくて、mbox形式だとmbxという拡張子が付くので見た目で判断しやすい。Thunderbird側では、アドインとしてImportExportToolsをインストールしておく。ローカルフォルダを右クリックして、mboxファイルをインポートを選択し、既定の設定のままOKをクリックして、エクスポート済みのmboxファイルを選択する。これだけで、"フォルダ名.mbx"というフォルダがThunderbirdに作られてインポートされるので、最短ではこれで終了ということになる。これが日本語のメールだとこんなに簡単ではなくて、もうひと手間かけないと文字化けして読めないので注意が必要だ。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パートだけヘッダーを元にもどしてやらなければならない。秀丸で置換する場合は、改行を含めて置換しなおす必要がある。quoted-printableで置き換えれば元に戻るはず。content-transfer-encodingとしてquoted-printableではなくBase64という方式が使用されている。Base64の場合、QPとは違ってタグも読み取ることができなくなる。この意味不明なデータの中に書かれている文字コードもISO-2022-JPのままなので、Shift_JISに一括置換したヘッダーをISO-2022-JPに戻さないといけない。やり方はQPの場合と同じで、改行を含めて正規表現で置換する。quoted-printableだったところをbase64に置き換えるだけ。これはシングルパートのテキスト形式のメール。8bitが指定されている。これも一切変更の必要なし。(元々、ISO-2022-JPしか置換対象じゃないんで関係ない)これは文字コードとしてUTF-8(Unicode)が使われている。これもcontent-transfer-encodingが8bitなので、Shift_JISのつもりでエディタで読み取ると文字化けして表示されてしまう。これもISO-2022-JPではないんで対象外。そのままにしてインポートして問題なし。mboxファイル全体に対して最初に一括置換するときの例は以下の通り。これを一度実施してから、上記例外パターンを元に戻す必要がある。メール本文のインポートが終わったら、残りはアドレス帳。Winbiffでcsv形式でエクスポートしたら、Thunderbirdでインポートするわけだけど、そのとき、エクスポートされたデータの各列が何に相当するかをThunderbirdに教えてやらなければならない。基本的には、表示名、メールアドレスの順になっていると思うんで、上下のボタンでフィールドをこんな風にあわせてやればいいだけ。間違い、不明点はコメントでどうぞ。帰省このブログを購読Homeこのブログはクリエイティブ・コモンズでライセンスされています。