如何修改 Postfix 的最大邮件大小限制?

Postfix 邮件大小由 message_size_limit(单封邮件,默认 10,240,000 字节)控制;mailbox_size_limit 另约束 local 投递的邮箱文件大小;用 postconf -e 修改后 reload。注意对方服务器与中间网关也有自己的限制。

最佳实践
如何修改 Postfix 的最大邮件大小限制?封面

核心参数:message_size_limit(单封邮件的最大字节数,含附件编码膨胀,默认 10,240,000 字节,约 9.77 MiB)。用 postconf -e "message_size_limit = 20971520" 改为 20 MiB 并 reload 即生效。mailbox_size_limit 是 local 投递代理写入邮箱文件的大小限制,不是通用邮箱总配额。

修改步骤

# 1. 查看当前值
postconf message_size_limit mailbox_size_limit

# 2. 修改(20 MiB 示例;单位:字节)
sudo postconf -e "message_size_limit = 20971520"
# 若使用 local 投递,另行检查 mailbox_size_limit 是否兼容该邮件大小;不要无条件取消限制

# 3. 生效
sudo systemctl reload postfix

也可以直接编辑 /etc/postfix/main.cf 改对应行,效果相同。

换算要点

  • 附件经 Base64 编码后体积膨胀约 33%:15 MiB 附件仅 Base64 主体就约 20 MiB,还需为换行、MIME 头和正文留余量,20 MiB 不足以保证接收
  • 常用值:20 MiB = 20971520,50 MiB = 52428800,100 MiB = 104857600

调大未必就够:链路上的其他限制

你的服务器放行 50MB,不代表邮件能送达:

  1. 收件方服务器:对方 message_size_limit 比你小照样退信,并注意区分供应商的发送附件限制与接收整封邮件限制
  2. 中间网关/反垃圾设备:有自己的体积阈值
  3. 客户端: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:是,message_size_limit 为 0 表示不设此大小上限,不是回到默认值;仍受资源及其他链路限制,通常应保留合理上限。

Q:只发邮件的服务器需要管 mailbox_size_limit 吗?
A:不需要,它约束 local 投递代理的邮箱文件大小,不是所有投递系统的总配额,纯发送网关无本地邮箱。

Q:虚拟邮箱(virtual mailbox)受 mailbox_size_limit 管吗?
A:不受。Postfix virtual 投递代理使用 virtual_mailbox_limit;若交给 Dovecot/LMTP 等代理,则还需检查该代理的配置。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台