邮箱空间满了就无法收信?IMAP 邮箱限额机制详解

用户邮箱已满时,发给他的邮件会怎样?管理员如何查看和调整邮箱限额?

当邮箱空间超过配额限制时,邮件系统(MTA + MDA)的行为取决于具体实现,但大致遵循以下规则:

1. 投递阶段的拒绝(SMTP 层面的退回)

在邮件投递至目标用户邮箱前,MDA(Mail Delivery Agent,如 Dovecot LDA、Postfix virtual mailbox delivery agent)会检查用户当前存储用量。若用量已超过配额(quota),MDA 会向发送方 MTA 返回永久性投递失败响应,例如:

550 5.2.2 Mailbox full — please try again later
552 5.2.2 Over quota

发送方 MTA 收到 5xx 永久失败后,生成退信(bounce)通知发件人。许多大型邮件服务(如 Gmail、Outlook)会尝试多次重投后才会退信。

2. IMAP QUOTA 扩展(RFC 2087)

IMAP 协议通过 GETQUOTAGETQUOTAROOT 命令让客户端查询当前限额和使用量。客户端可以在用户试图存储新邮件时提前收到超限通知。例如:

C: A01 GETQUOTAROOT INBOX
S: * QUOTAROOT INBOX user.zhangsan
S: * QUOTA user.zhangsan (STORAGE 524288 1048576)
S: A01 OK Getquota complete

第三行 STORAGE 524288 1048576 表示当前使用了 524,288 KB(约 512 MB),配额为 1,048,576 KB(1 GB)。

3. 实际邮件系统的常见处理方式

Postfix 通过 virtual_mailbox_limitvirtual_mailbox_limit_maps 控制邮箱配额;Dovecot 通过 quota_plugin 实现配额强制计数,支持 dict、dirsize、maildir 等多种后端。当配额已满时,Dovecot LDA 向 Postfix 返回临时性失败(4xx),Postfix 根据 queue_run_delay 在队列中留置重试;若反复失败超过 maximal_queue_lifetime(默认 5 天),最终退回发件人。

4. 管理员操作建议

遇到"邮箱满"导致的收信异常,管理员应:

  • 使用 doveadm quota get -u user@domain.com 查看具体用户配额使用情况;
  • 使用 doveadm quota set -u user@domain.com -m User quota 2G 临时提升配额;
  • 检查 mail.log 中是否有 mailbox fullover quota 相关条目;
  • 建议用户清理无用邮件或归档至本地,释放空间。

需要特别注意的是,某些邮件系统在队列满占用磁盘空间后,可能影响整台服务器所有用户的收信,因此建议将用户配额控制在磁盘总容量的 80% 以下,并设置系统级别的 mailbox_size_limit 保护。

参考来源:RFC 2087 — IMAP QUOTA extension · Dovecot Quota 配置手册