自前サーバの話。新しいdovecotの環境に移行してもらって、今回からIMAPの使用を奨励する形にしたら・・・MacのMail.appを使っているのからメールを削除できなくなったという苦情が。
調べてみると、どうも怪しいことになっている。問題は2点ある。
まず一つ目はフォルダー名。dovecotはMaildirを使用する場合にIMAPからフォルダを作成すると階層を表す記号に"."を使ったフォルダをルートのMaildir直下に作成する模様。そしてMail.appがメールアドレス名(xxx@example.com)を含めたフォルダを作った為、実際のフォルダとしてはそれっぽいものが作られてはいるけど、dovecotが間違えて解釈するためにIMAP的には意図したフォルダが実際には無い様に見えるという状態になってしまうらしい。
そして二つ目がインデックス。どうもdovecotはインデックスファイルを作成しておりそれを優先的に使用してIMAPのレスポンスを返すらしい。なので実際のフォルダ構成とこれが食い違うとエラーになってしまう模様。
とりあえずここまでは状況からの推測ですが、また間違ってはいないと思います。根本的にはMail.appの問題というよりフォルダー名として"."を指定された際にちゃんとエスケープしないdovecotの実装に問題がある気がするけど実際それをどう回避するかという話になる。
結論から行くと今回はdovecotのパッチ作るのも面倒なのでとりあえず後ろ向きな方向でThunderbirdに移行してもらった。 もちろん使い手が意図的に"."の入ったフォルダーを作成したらまた同じことになると思われるので恒久対策ではないけど、管理者がMail.appを常用しておらず挙動が読めないので今後のサポートを考えると事故の少ない方向に振った次第。身内しか使っていないからこその対応ですが。
ただし二つ目の様に、すでに不整合が起きているのでThunderbirdにしても特定操作がエラーになってしまうのは変わらない。最初よくわからないのでsshでつないで手動でフォルダをリネーム or 消してクライアントから読み直せばokダロっと思って試してみたのだけどindexとの不整合が発生し
Mailbox doesn't exist XXXXX
こんなエラーが出てフォルダーへアクセスする際にダメでした。インデックスファイルらしきものを削除して再構築を促してもNGだったりしたのが非常に謎ですが。
とりあえずは後ろ向きな解決方法で不整合が起きたフォルダは大本のフォルダはssh経由でサーバから手動で削除し、メーラから同名のフォルダを作りなおし、クライアントから再度削除していく事によって整合を保つことが出来た。またゴミ箱(Trash)等クライアントとして特殊なフォルダはアプリ側ではねられるので、ssh経由で手動でMaildirを一つずつ作成しなおした。
というところで一応Thunderbirdからは問題なくいけるようになったんだけど、dovecotもMail.appも挙動を理解していない為に今回の様な対応になったので一度これは再テストしてみた方が良さそうという事で今度追試を行います。