IMAPのメールサーバをimapsyncというツールで複製を取っているが、フォルダに関しては、コピー元のフォルダが基準となり、コピー先に無ければ作成して中身をコピーという動作になっている。
コピー元のフォルダが削除されたらどうなるか?と言えば、コピー先のフォルダはそのまんま。つまり、長期間複製を取っていると、コピー元で削除されたフォルダが、コピー先でどんどん増えていくという困った状態になる。
IMAPのサーバの機能としては、メールだけは「何日以上古いものは消す」という事はできるが、フォルダは消せない。
空のフォルダが溜まって来るのを何とかしないといけないので、ツールを作る事にした。
socket openとか低レベルな関数組み合わせてゴリゴリ作らなきゃいけないのかと思ったが、PHPにはIMAP Clientなる便利な関数群があった。
フォルダツリーを辿って、子フォルダが無く、メールも入ってないフォルダを削除するってのを再帰処理で組んだが、socketとかバッファとか、文字列処理とか考えなくていいからすげー楽だ。
いい世の中になったものよのう。