「9.5MBに制限したつもりが、20MBの添付が通ってしまう」
こういう「制限がかかっているようでかかっていない」状態のサーバーは、私のサポート案件でも定期的に見かけます。
この記事では、Postfixでメールサイズの制限を設定する方法を、main.cfの編集・反映確認・周辺パラメータの整合性まで含めて、現場でそのまま使える形で解説します。
RHEL9系/Ubuntu 24.04 LTSのPostfix 3.6~3.8で動作確認済みです。
この記事のポイント
・Postfixのメールサイズ制限は message_size_limit でバイト単位で設定する
・デフォルト値は 10240000(約10MB)/無制限にしたい場合は 0 を指定する
・main.cf 編集後は postfix reload で設定を反映させる
・mailbox_size_limit と virtual_mailbox_limit との整合性チェックを必ず行う
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
Postfixでメールサイズの制限を設定する基本
Postfixでメールサイズの制限を設定するには、設定ファイル/etc/postfix/main.cf に message_size_limit パラメータを追加します。値はバイト単位の整数で指定します。デフォルトでは
10240000(約10MB)までのサイズ制限が設定されています。message_size_limit を明示的に追加することで、任意のサイズに変更することができます。# main.cf を編集 $ sudo vi /etc/postfix/main.cf # 9.5MB に制限する場合(末尾に追加) message_size_limit = 9500000
# 設定ファイルの再読込 $ sudo postfix reload または $ sudo systemctl reload postfix
Postfixのメールサイズ制限で使う主要パラメータ
Postfixのメールサイズ制限は、message_size_limit 単体で完結しません。受信箱・キュー・添付ファイルサイズと整合性を取らないと、想定通りに制限がかかりません。実務で必ず確認すべき関連パラメータを整理します。| パラメータ | 意味 | デフォルト値 |
|---|---|---|
message_size_limit |
SMTPで受信する1通あたりの最大サイズ(バイト) | 10240000(約10MB) |
mailbox_size_limit |
ローカル配送先メールボックスの最大サイズ(バイト) | 51200000(約50MB) |
virtual_mailbox_limit |
virtual配送先メールボックスの最大サイズ(バイト) | 51200000(約50MB) |
smtpd_recipient_limit |
1通あたりの宛先数上限 | 1000 |
queue_minfree |
キューディスクの最低空き容量(バイト) | 0(無効) |
注意:
message_size_limit が mailbox_size_limit より大きいと、SMTPは受信したのに配送時にバウンスする現象が起こります。受信制限を増やすときは、メールボックス上限も同時に引き上げてください。メールサイズ制限の現在値を確認する
変更前後の現在値を確認するには、postconf コマンドを使います。postconf はmain.cf/master.cfの設定とコンパイル時のデフォルト値を統合した最終値を返してくれるため、「main.cfに書いたのに反映されない」事故を防ぐのに必須のコマンドです。1. message_size_limit の現在値を確認する
$ postconf message_size_limit message_size_limit = 9500000
2. 関連パラメータをまとめて確認する
$ postconf | grep -E '^(message_size_limit|mailbox_size_limit|virtual_mailbox_limit|smtpd_recipient_limit|queue_minfree)' message_size_limit = 9500000 mailbox_size_limit = 51200000 virtual_mailbox_limit = 51200000 smtpd_recipient_limit = 1000 queue_minfree = 0
3. デフォルト値との差分を確認する
# -n オプションでデフォルトから変更されたパラメータだけを表示 $ postconf -n | grep size message_size_limit = 9500000
メールサイズの制限を解除・無制限にする方法
社内専用のサーバーや、大容量データ受け渡しを許容するシステムでは、メールサイズ制限を実質無制限にしたいケースがあります。Postfixではmessage_size_limit = 0 を指定すると無制限になります。ただし、無制限設定には注意点があります。
・キューディスク逼迫:巨大メール1通がキューを埋め尽くす可能性がある
・メールボックス溢れ:受信ユーザー側のディスク使用量が爆発する
・SMTPセッション長時間化:大容量メールの送受信中は他クライアントの接続が遅延する
・スパム標的化:制限ゼロのMTAは送信元偽装のリレー試行先になりやすい
無制限を選ぶ場合でも、
queue_minfree を設定してディスクが枯渇する前に新規受信を停止させるなどの保険を必ずかけてください。送信・受信側の上限と合わせる
Postfixで制限を設定しても、上流/下流のMTA・MUA側でも別の上限がかかっています。実際に「20MBは送れるけど30MBは弾かれる」という挙動になるのは、たいてい次のいずれかが原因です。・Gmail:添付25MB制限(実体は約35MBまでエンコーディング後)
・Microsoft 365:標準25MB、テナント設定で最大150MBまで拡張可能
・送信元MTA:SaaSメール送信サービス側で20~25MB制限のケースが多い
・ロードバランサー/WAF:HTTPSプロキシ経由のSMTPでは別途バッファ制限がある
社内システム間で大容量メールを通したい場合は、Postfixだけでなく送受信両方のMTA設定・経路上のプロキシ設定を合わせて確認する必要があります。
トラブルシュート・よくある質問
Q. main.cf に書いたのに postconf で値が変わらない
typo・スペース・行頭スペース・コメント記号忘れが多い原因です。postconf -e "message_size_limit=9500000" でコマンド経由で書き込むと安全です。書き込み後は postfix reload を忘れずに。Q. Message size limit exceeded のエラーがログに出る
SMTPセッション中に上限超過を検知した正常な拒否動作です。/var/log/maillog(RHEL系)または /var/log/mail.log(Debian系)に552 5.3.4 Message size exceeds fixed limit が記録されます。送信側に上限値を伝えて分割してもらうのが基本対処です。Q. メールボックス側でバウンスする
mailbox_size_limit または virtual_mailbox_limit がメッセージサイズより小さいケースです。message_size_limit ≤ mailbox_size_limit の関係を保ってください。Maildir形式の場合は1メッセージ=1ファイルなので、ファイルシステムのinode/単一ファイルサイズ制限にも注意が必要です。Q. postfix reload と systemctl reload postfix のどちらを使うべきか
どちらでも同じ動作になります。systemd管理のサーバーではsystemctl reload postfix がログとの整合性を取りやすく、cron等の自動運用でも扱いやすいため推奨です。Q. message_size_limit を変更しても古いキューに残っているメールには適用されない
キューに既に入っているメールは受信時のサイズチェックを通過済みのため、変更後の制限は適用されません。postqueue -p で現状確認後、必要なら postsuper -d で個別削除するか、postsuper -d ALL で全削除します(業務影響に注意)。本記事のまとめ
| やりたいこと | コマンド/設定 |
|---|---|
| メールサイズ制限を9.5MBに設定する | postconf -e "message_size_limit=9500000" |
| 制限を無制限にする | postconf -e "message_size_limit=0" |
| 現在値を確認する | postconf message_size_limit |
| 関連パラメータをまとめて確認する | postconf | grep size_limit |
| main.cfから変更されたパラメータを確認する | postconf -n |
| 設定変更後の反映 | systemctl reload postfix |
| キュー内のメッセージを確認する | postqueue -p |
メールサイズの制限は、Postfix単体で完結する設定のように見えて、実は「上流MTA・下流MTA・メールボックス容量・キュー容量」と整合性を取って初めて意図通りに動きます。設定値だけ書いて満足せず、postconfで反映を確認し、実際にテストメールを送って境界値を確認するところまでが、現場で求められる運用手順です。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:Postfixでメッセージの再送信時間を設定する|minimal_backoff_time / maximal_backoff_time の実務
- 前のページへ:logresolveコマンドでApacheログのIPアドレスをホスト名に変換する方法
- この記事の属するカテゴリ:Linuxtipsへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます