如何修改 Postfix 的最大邮件大小限制?
Postfix 邮件大小由 message_size_limit(单封邮件,默认 10MB)与 mailbox_size_limit(邮箱容量)控制;用 postconf -e 修改后 reload。注意对方服务器与中间网关也有自己的限制。
核心参数:message_size_limit(单封邮件的最大字节数,含附件编码膨胀,默认 10MB ≈ 10240000)。用 postconf -e "message_size_limit = 20971520" 改为 20MB 并 reload 即生效。如需同时调整邮箱总容量,再改 mailbox_size_limit。
修改步骤
# 1. 查看当前值
postconf message_size_limit mailbox_size_limit
# 2. 修改(20MB 示例;单位:字节)
sudo postconf -e "message_size_limit = 20971520"
sudo postconf -e "mailbox_size_limit = 0" # 0 = 邮箱容量不限
# 3. 生效
sudo systemctl reload postfix
也可以直接编辑 /etc/postfix/main.cf 改对应行,效果相同。
换算要点
- 附件经 Base64 编码后体积膨胀约 33%:想支持 15MB 附件,邮件上限至少设 20MB
- 常用值:20MB = 20971520,50MB = 52428800,100MB = 104857600
调大未必就够:链路上的其他限制
你的服务器放行 50MB,不代表邮件能送达:
- 收件方服务器:对方 message_size_limit 比你小照样退信(Gmail 收信上限 25MB)
- 中间网关/反垃圾设备:有自己的体积阈值
- 客户端:Outlook 等客户端自身也有附件限制
大附件的正确姿势是发链接(网盘/对象存储预签名 URL),而不是硬抬邮件体积。
验证
postconf -n | grep size_limit
# 发测试信后看日志
tail -f /var/log/mail.log
超限的邮件在日志里会有 552 5.3.4 Message size exceeds ... 之类的记录。调整后分别测试低于和高于上限的邮件,并确认拒收来自本机还是链路中的下一跳;按队列 ID 查询比仅搜索“发送失败”更容易定位限制所在。
常见问题(FAQ)
Q:message_size_limit 设 0 是不限吗?
A:不是。0 对该参数意味着用默认;要"不限"只能设一个足够大的值。mailbox_size_limit 的 0 才是不限。
Q:只发邮件的服务器需要管 mailbox_size_limit 吗?
A:不需要,那是本地邮箱投递的容量限制,纯发送网关无本地邮箱。
Q:虚拟邮箱(virtual mailbox)受 mailbox_size_limit 管吗?
A:不受。虚拟邮箱用 virtual_mailbox_limit 控制。