Linux
postfix

Postfixのmailbox_size_limitについて調べてみる

前置き

あるエントリの補足として調べていたら脱線しすぎたので別エントリとして作成。

mailbox_size_limitとは?

Postfixでは1メッセージ(=メール)あたりの制限message_size_limitとMailbox(mbox)あたりの制限mailbox_size_limitがある(他にもあるが今回は省略)。基本的にMailboxはユーザごとに作られるため、mailbox_size_limitはメールアカウント毎の容量制限となる。
設定でMaildir/形式を利用している場合は前者のみ気にしていればいいが、Mailbox形式だとIMAPを利用している場合は受信トレイ、POP3の場合はサーバに残るメールの容量上限となる。
もし受信したメールをMailboxに追記した時、この上限を超えるようだとメールは保存されず送信者に対してMAILER-DAEMONからエラーメッセージが返信される。その後より小さなメールが届いて上限を超えないようならそのメールは保存される。

具体的なmailbox_size_limitの上限値

ググると初期値が50MB(5120000)とか0を指定すると無制限になるとか出てくるが、本当に無制限になるとかありえないので実際はいくらなのか調べてみる。

Postfix 2.xの早いバージョンでは経験的に2GBであると知っていた。これにより上限は2^31-1バイトで、mailbox_size_limit = 2147483647となる。

Postfix 2.9からは2GB以上のMailboxサイズに対応したようで、ソースのpostfix/src/global/mail_params.hを確認すると確かにPostfix 2.8まではintだったものがlongへと置き換わっている(ただしmessage_size_limitは10MBで変わりないので初期値はmessage_size_limit*5の50MBのまま)。
つまり2^63-1バイト(8EiB)までメールボックスが大きくなっても大丈夫!
また、もとはintであったことから前述の2GiB制限とも合致する。

実際にPostfix 2.10でmailbox_size_limit = 9223372036854775807だとメール受信可能だが、mailbox_size_limit = 9223372036854775808にするとmaillogにエラーが記録され受信できなくなる。
なお、この設定値はメールを受信して保存する際まで実際に評価されることが無いため、postconfとかpostfix checkで設定値が正常か異常か判断することができないのが厄介。

従って、mailbox_size_limit = 0と指定することでPostfix 2.8以前では2GiB-1バイトが、Postfix 2.9以降では8EiB-1バイトがMailboxの上限となる。

ちなみに標準ではCentOS 6ではPostfix 2.6、CentOS 7ではPostfix 2.10となっている。