Mail.app でメールボックスを再構築するとクラッシュする

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 を使ったクラウド環境に移行しよう。