だめだめですね、移行アシスタント。
てなわけで、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さまさまだね。
