How do I configure sending limits and queues?
Still have a question, spotted an error, or have a better explanation or a source we should cite?
You've set up your own mail server and suddenly you're getting throttled or deferred. Recipient servers are pushing back, and you're not sure why. Most of the time, the answer is in how your MTA (Mail Transfer Agent) is configured around sending limits and queue behavior.
Recipient mail servers enforce rate limits to protect themselves from floods. If you open 50 simultaneous connections to Gmail and dump thousands of messages, you'll get rate-limited or blocked. Your MTA's job is to be a polite guest: space out connections, don't overwhelm any single destination, and back off gracefully when told to wait.
Connection limits. In Postfix, smtp_destination_concurrency_limit controls how many simultaneous connections open to any single destination. The default is 20, but 5 to 10 is more sensible for most destinations. A lower number means slower delivery, but far fewer throttle responses.
Message rate delays. smtp_destination_rate_delay adds a pause between messages to the same destination within a connection. Setting this to a few seconds smooths out delivery spikes that can trigger spam filters.
Queue lifetime. maximal_queue_lifetime controls how long Postfix tries to deliver a message before bouncing it back. Five days is the RFC-standard default and it's a reasonable choice. Too short and you'll lose messages that would have delivered with patience. Too long and your queue grows with genuinely undeliverable mail.
Retry intervals and exponential backoff. minimal_backoff_time and maximal_backoff_time define how long Postfix waits before retrying failed deliveries. Exponential backoff means the wait gets longer with each failure: start with 5 minutes, then 10, then 30, then a few hours. This mimics what major ESPs do and is much more respectful of recipient server capacity than hammering every 60 seconds.
A solid starting point for Postfix:
smtp_destination_concurrency_limit = 5smtp_destination_rate_delay = 2smaximal_queue_lifetime = 5dminimal_backoff_time = 300smaximal_backoff_time = 4000s
These aren't magic numbers. You'll tune them based on your volume, your sending domains, and how your bounce handling is set up. Watch your mail logs as you go. If you're seeing consistent deferrals from one provider, it's usually a sign to reduce concurrency or increase delays to that destination specifically.
Contributors
Who worked on this answer
Every name links to their profile. Every company links to their site. Real people, real accountability.