Mail.app でメールボックスを再構築するとアプリがクラッシュしてしまい、メールボックスが不完全になってしまうので、修復を試みてみました。とりあえず、うまく行ったように見えますが、必ず成功するかどうかはわからないので、参考にする場合にはあくまでも自己責任でどうぞ。
Mac OS X (10.8.3) の Mail.app で、メールの内容がおかしくなってきたら「メールボックス」メニューから「再構築」を選ぶと、保存されているメッセージを読み直して正常に戻ることがある。
少し前にそれをやった記憶があるのだが、以前のメールを検索してみると、届いているはずのメールがどうしてもみつからない。最近届いたメールと古いメールだけが残っていて、間が全部なくなっている感じだ。
メールボックスがどこにあるか探してみると、ホームディレクトリ以下のこんな場所にあった。
~/Library/Mail/V2/POP-account.example.jp@mbox.example.jp/INBOX.mbox/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx
ここに、普通は Data というフォルダだけがあるのだが、再構築に失敗しているメールボックスの場合、こんなことになっていた。
% du -hs * 540M Data 1.3G Data_Rebuild 540M Data_Rebuild-1
さて、この状態で再構築をすると何が起こるかと言うと、まず Data を Data_Rebuild-2 に変更する。そして Data_Rebuild-2 を読み直して Data フォルダを作り直す。正常に終了すると Data_Rebuild-2 は消えて、Data が正式なデータになるようだ。しかし、再構築の途中でアプリがクラッシュしてしまうと Data と Data_Rebuild-2 の両方が残ることになる。
ところで du の結果を見ればわかるように、Data_Rebuild は 1.3G あって、他のフォルダは 540M しかない。おそらく、最初に再構築した際、Data_Rebuild から Data を作っている途中でクラッシュしてしまったので、その後は不完全な Data を元にして再構築を繰り返すことになっているのだ。だから、何度やってみたところで、見えなくなったメールは出て来ない。
なので、Data_Rebuild 以外を消して(実際には別のフォルダに移動して)、Data_Rebuild を Data という名前に変更してから再構築したところ、無事成功して、見えなかったメールも見えるようになった。Apple Support Communities には Data_Rebuild-* を全部消してしまえという記事もあるが、今回の場合、それを信じて消してしまうと失われたメッセージは二度と戻らない。
ちなみに再構築した結果はこうなった。データ量が増えているのは、マルチパートをファイルとして展開しているためと思われる。
% du -hs Data 1.9G Data
この処理をする前は Data が正規のデータとして使われているので、最近読み込んだメールはそこに保存されているはずだ。だから、それを Data_Rebuild で置き換えてしまうと、新しいメールが失われることになる。自分の場合はそんなことはなかったが、それは POP サーバに残っていたからかもしれない。その点、注意されたし。
プライベートなアカウントは IMAP に移行したのだが、仕事用のは POP のままだったので、早いことこちらも IMAP を使ったクラウド環境に移行しよう。