dovecot quota した

quotaは、メールボックスの残り容量に上限を設ける機能で今回その設定をした。

postfixでローカルの配送をする場合、quotaにはmboxのみ対応していてmaildirでもquotaを設定するにはDVAというパッチを当てる必要があるらしい。
(なんで公式にmaildirに対応しないんだろう?2012年より前からパッチ充てるフローがあるあるみたい)

パッチあてるかーと思ってquotaについて調査している時、ちょうど1週間くらいDVAをホストしているsourceforgeがサイトダウンしている時期だった。ので代替案を探していたら、dovecotのlmtpでローカル配送をすればpostfixにパッチなしでmaildirのquotaを使えるとどこかの記事に書いて有ったのでlmtpを使ったらできた。

lmtpという実態がいまいちわからないんだけど、local配送をlmtpにすることでpostfixのキューを減らせたり、パフォーマンスがいい、そしてldaよりイイとのことらしい。
(ちなみにldaは、必要になったらプロセスを都度作成しては終わったら消えるみたいなのだけど、lmtpだとプロセスが常駐しているようでオーバーヘッド少ないみたい。)

設定内容は、postfixのmain.cfにdovecot-lmtpを参照するよう書けば動くので完全にブラックボックスです。本当にありがとうございました。

##
## LMTP specific settings
##

protocol lmtp {
  # Space separated list of plugins to load (default is global mail_plugins).
  mail_plugins = $mail_plugins quota
  info_log_path = /var/log/dovecot-lmtp.log

  userdb {
    driver = sql
    args = /etc/dovecot/dovecot-sql.conf.ext
  }
}

service lmtp {
  executable = lmtp -L
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    user = postfix
    group = postfix
    mode = 0600
  }
}

設定内容はdovecot公式に書いている通りすれば、maildirのrootにmaildirsizeというファイルが作成される。上限を超えるとbounceしてくれてた。
http://wiki2.dovecot.org/Quota/Configuration

それとimapクライアントからquotaの情報もとれた。

2.1.0 :017 > imap.getquotaroot("INBOX")
 => [#<struct Net::IMAP::MailboxQuotaRoot mailbox="INBOX", quotaroots=["User quota"]>, #<struct Net::IMAP::MailboxQuota mailbox="User quota", usage="33", quota="10240">] 

以上。