なうびるどいんぐ

脳みそ常時-3dB

[Dovecot]autoexpungeで古いメールを自動削除

      HimaJyun

メールサーバを建てる際は自動削除の設定もしておかないと、削除(ゴミ箱に行くだけ)で気付いたらゴミ箱が山盛り、Junkフォルダでスパムが腐るほど溜まってる、なんてのはよくある事です(よね?)

メールサーバ関連の記事は古い事が多いのでfindを使っていたりするのが多いですが、Dovecot 2.2.20からautoexpungeというものでメールを自動削除出来るようになったので、それの使い方をメモ。

スポンサーリンク

メールの自動削除

前に「[Dovecot]スパム判定されたメールを迷惑メールフォルダに振り分ける」という記事を書いたのですが、これで振り分けされる迷惑メールはJunkフォルダに蓄積していくだけです。

自動振り分けで蓄積したスパム、消すつもりで放り込んだメールが行くゴミ箱なんかの中身は基本的に要りません。

という訳で、これを消す、手でやるのはめんどくさいから自動で。

autoexpunge

従来まではcronでfindを動かして定期的に消したりするのが主流でしたが、Dovecot 2.2.20からautoexpungeが追加されています。

これの設定は極めて簡単で、メールボックスの設定にautoexpungeを付けるだけです。(以下の例では30日後に削除する設定)

namespace inbox {
  mailbox Junk {
    special_use = \Junk
    auto = subscribe
    autoexpunge = 30d
  }
  mailbox Trash {
    special_use = \Trash
    auto = subscribe
    autoexpunge = 30d
  }
}

簡単ですね、cronに色々登録しなくてもOK

負荷対策

いくつか負荷対策としてしておいた方が良い設定があるようです。

といっても難しい物ではないので、ささっと紹介。

特定のプロトコルでのみ動作させる

先ほど紹介した設定例ではPOP、IMAP、LMTPの3つで動作します。

POP、IMAPはクライアントのログアウト後に動作するのですが、LMTPはメールを受信するたびに動作してしまいます。

これだとメール配信に遅延が発生したりすることがあるので、特定のプロトコルでのみ動作するように設定した方が良いかも。

protocol imap {
  namespace inbox {
    mailbox Junk {
      autoexpunge = 30d
    }
    mailbox Trash {
      autoexpunge = 30d
    }
  }
}
#protocol pop3 {
#  namespace inbox {
#    mailbox Junk {
#      autoexpunge = 30d
#    }
#    mailbox Trash {
#      autoexpunge = 30d
#    }
#  }
#}

POP3ではサーバーサイドのメールフォルダが利用できない(=SpamやJunkは見られない)ので、IMAPの時に動作させたので十分だと思われます。

こうする事で、IMAP(厳密にいえばIMAPログアウト時)のみ処理が実行されるので、負荷が少ないでしょう。

mailbox_list_index

autoexpungeを利用する際は「mailbox_list_index = yes」を設定した方が良いでしょう。

これを設定すると実際にメールを舐めまわしたりする必要なく、要らないメールを探し出して消すことが出来ます。

(というか、設定していないとメールの件数に応じてO(n)で処理に時間が掛かるようになるかと思われ)

その他

基本的にこれでメールの自動削除が出来ます。

少し考えれば当たり前ですが、該当のフォルダにあるメールは「そこに移動してからn日後」に削除されます。

受信したのが1日前でも1カ月前でも1世紀前でも、「移動してからn日」です。当たり前ですね。(そうじゃないと間違えて入れちゃったときにお察し)

疲れていたり、構築作業中で色々考えてると忘れていて「あれ~?設定したより前の日付(のメール)なのに消えな~い……」なんて思っちゃうことがあるかも……?

小ネタ

ちなみに、autoexpunge_max_mailsを使うと設定した件数以上の時にメールを削除します。(Dovecot 2.2.25で追加)

手元のDovecotがバージョン不足だったので挙動の検証できず……どちらを設定するかはお好みで。

参考:MailboxSettings - Dovecot Wiki

 - サーバー