Dovecot LMTP and Postfix MTA: Which Side Owns Quota Rejection and Subaddress Detail?
0 reputation · 15 Aug 2024, 09:48 UTC
0 reputation · 15 Aug 2024, 09:48 UTC
Postfix hands local mail to Dovecot through mailbox_transport=lmtp:unix:private/dovecot-lmtp, where Dovecot listens on that socket. The contract is LMTP over a socket, with no shared library or database between components. At this boundary, an unresolved decision remains: should quota rejection and subaddressing be owned by Postfix policy delegation to Dovecot's quota-status service at SMTP time, or by Dovecot's LMTP-time quota and Sieve checks?
Enforcing quota at LMTP rejects the per-recipient RCPT with an SMTP-class reply, and quota_full_tempfail determines whether Postfix bounces or defers; quota-status answers earlier, at SMTP policy time. Subaddressing crosses the same line: Postfix's recipient_delimiter must agree with Dovecot's LMTP handling, or the detail part is stripped before Sieve can use the subaddress and envelope-detail extensions.
Exact defaults for quota_full_tempfail and reply strings vary across Dovecot releases, so remembered values should be treated as unverified. LMTP over TCP needs its own TLS and auth settings separate from imap. Socket path and permissions inside Postfix's chroot affect deferrals rather than rejections.
Which component should own quota rejection, and what criteria decide between SMTP-time policy and LMTP-time enforcement? How can a configuration guarantee that user+tag detail survives the LMTP boundary into Sieve without relying on unverified defaults? What checks confirm that socket reachability, plugin loading under protocol lmtp, and delimiter alignment are correct before attributing failures to the other component?
A thoughtful contribution can make all the difference. Be the first to share one.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.