だめだめですね、移行アシスタント。
てなわけで、Windows Live メールからMail.appへのマイグレーションだいさくせ~ん!の開始です。
まずWebで調べるとThunderbirdを中継するのが鉄板な方法らしいです。
(1)WindowsのThunderbirdに「ImportExportTools」アドオンをインストール
(2)Windows Live メールでeml形式ファイルにエクスポート
(3)WindowsのThunderbirdにImportExportToolsをつかってインポート
(4)WindowsのThunderbirdでmbox形式にエクスポート
(5)macにmbox形式ファイルをコピーして改行コードをCRLFからLFに変換(tr -d \r)
(6)macのMail.appにインポート
一応、この方法試してはみたけど、それでもまだ文字化けが発生するメールが存在しました。
確認してみたら(3)の段階で文字化けしているメールがありました。
emlファイルの内容を確認したら、Content-Typeのcharsetにiso-2022-jpと指定していながら、本文がShift_JISなんていう、めちゃくちゃなものでした。
そういえば、昔のメーラーにはそんな愉快なメールを送信してくれるのも存在してたなぁ。
Windows Live メールとかOutlook ExpressとかはContent-Typeの指定なんか無視して表示していたから、なんら問題もなかったんだね。
てなわけで、Thunderbirdを使ったマイグレーション大作戦は大失敗に終わりましたとさ。
まぁ、これで終われたら楽なんだけど。
奥さんが「だんなさんなら何とかしてくれる!」なんて目で見るんです。
てなわけで、おうちで転がっているLinuxを使って、変換プログラムでマイグレーション大作戦りた~ん!です。普通のおうちにはLinuxなマシンなんて転がっていないと思うので、まったく転用が利かない話になってしまいますが。
さて、要はemlファイルからContent-type: charset="…"のを拾って、それに併せてnkfで変換してあげれば良いのです。
ついでに改行コードもLFにしてformailでmbox形式に変換までしちゃいましょう。的なタクティクスで。
で、作った変換スクリプトのソースが以下の通り。ちょっぴり長くなっちゃったけど。
---------------------------------------------------------
#!/bin/bash -f #メール変換のメイン処理ループ function mailconv_main() { # カウンター設定 max=`ls *.eml|wc -l` cnt=1 # ファイルがなければリターン if [ $max -eq 0 ] ; then return fi #出力mboxファイル名の設定 arc="`pwd`".mbox rm -f "$arc" #カレントディレクトリemlファイル読み込み for item in *.eml do #ファイルが存在しなければ次のループへ if [ ! -f $item ] ; then continue fi opt="" #メールからContent-Type text/plain; charset=の行を取得 contenttype=`perl -p -e 's/;\r\n//g' < "$item" | grep -i 'Content-Type:.*charset=' | head -1` if [ ! -z "$contenttype" ] ; then #charsetの指定から文字コードを取得 charset=`echo $contenttype | sed -e 's/.* charset=\(.*\)/\1/' | sed -s 's/"//g' | tr [A-Z] [a-z]` #文字コードに併せてnkfのオプションを設定 if [[ "$charset" =~ utf-8 ]]; then opt="-w"; elif [[ "$charset" =~ iso-2022-jp ]]; then opt="-j"; elif [[ "$charset" =~ us-ascii ]]; then opt="-j"; elif [[ "$charset" =~ iso-8859-1 ]]; then opt="-j"; elif [[ "$charset" =~ shift_jis ]]; then opt="-s"; elif [[ "$charset" =~ windows-31j ]]; then opt="-s"; elif [[ "$charset" =~ cp932 ]]; then opt="-s"; elif [[ "$charset" =~ euc-jp ]]; then opt="-e"; else echo "Unknown Charset : $item : $contenttype : $charset" fi fi if [ -z "$opt" ] ; then # jis, shift_jis, utf-8に当てはまらない場合はjisを指定 opt="-j" fi #変換対象の表示 echo "$arc : $cnt/$max $opt" # nkfを使用して文字コードを変更 -m0を指定する nkf -m0 -Lu $opt $item | formail >> $arc #カウントアップ cnt=`expr $cnt + 1` done return 0 } #カレントディレクトリ以下のディレクトリを検索 find . -type d | while read directory do pushd "$directory" #変換メインをコール mailconv_main popd done---------------------------------------------------------
後は出来上がった*.mboxファイルをmacにコピーして、Mail.appでmbox形式のインポートをするだけっと。
とりあえず、奥さんのメール2万通ぐらい変換しても文字化するようなメールは見つかってないからこれで大丈夫かな。
macでもnkfをインストールすれば使えそうなきがするけど、どうなんだろう。
sedとかperlとかformailは使えるみたいだしね。
nkfの代わりにiconvを使うという手もあるだろうけど、iconvは文字の自動認識がないから難しいだろうなぁ。
【今日の結論】
nkfさまさまだね。