3 min read
Retries, Rate Limits, and Queues: What Happens After You Hit Send
"Send" doesn't mean "delivered." Between your app and the inbox sits a queue, a set of retry rules, and the receiving server's rate limits. Knowing what happens in that gap makes you a calmer, better sender.
On this page
When your application calls "send," it feels instantaneous. But delivery isn't a single moment — it's a short journey through a queue, past rate limits, and sometimes through several retries before a message reaches the inbox. Understanding that gap helps you build systems that behave well and stops you from panicking at normal delays.
The queue
Your message doesn't go straight to the recipient's server the instant you send it. It enters a sending queue. Under normal conditions it moves through almost immediately, but the queue exists so the system can pace delivery, handle bursts, and retry failures in an orderly way. The moment a receiving server accepts the message is the moment it's truly "delivered" — everything before that is the queue doing its job.
Rate limits
Receiving servers protect themselves. Send too much, too fast, to a single provider and it will start deferring your mail — responding with a temporary "slow down" rather than accepting everything at once. This isn't a rejection; it's a request to pace yourself. A good sending system respects those limits and throttles automatically, spreading delivery over time instead of hammering the door.
This is also why sudden volume spikes cause trouble: they hit rate limits face-first. Steady, predictable sending flows through smoothly; bursts get metered.
Retries
When a message soft-bounces — a temporary failure like a full mailbox, a busy server, or greylisting — the right response isn't to give up, it's to retry later. Sending systems retry on a backing-off schedule: soon at first, then at widening intervals, giving the transient problem time to clear. Greylisting in particular relies on this behavior: some servers deliberately defer a first attempt precisely to see whether you retry like a legitimate sender would.
Retries have an end, though. If a message keeps failing across the full retry window, it's treated as a permanent failure and the address is suppressed. That's the system correctly concluding that "not right now" has become "not ever."
Why this matters for your app
Two practical lessons. First, don't treat "send" as "delivered" in your own logic — if you need to know a message truly arrived, listen for the delivery event rather than assuming success at the moment you handed it off. Second, don't try to reimplement pacing yourself by blasting messages as fast as your code can loop; let the platform's queue and rate-limiting do the pacing, because it's tuned to what receiving servers actually tolerate.
In Buzzmark, a hive's delivery events show you this lifecycle in the open — accepted, deferred, delivered, bounced — so the gap between "I sent it" and "it arrived" stops being a black box. Once you can see the queue working, the occasional delay reads as the system being careful, not broken.
Send transactional email that lands - from the EU
A clean API and SMTP relay with tracking, inbound mail and webhooks. Free up to 300 emails a month, no card needed.
Keep reading
Engineering 5 min read
Buzzmark Is Opening a Second Sending Location in the Netherlands
Today every message Buzzmark delivers leaves from our servers in Spain. In December 2026 we're adding a second sending l...
Deliverability 4 min read
We've doubled our sending infrastructure in Spain
Over the past few weeks we doubled the size of the infrastructure that delivers your mail. Nothing changes on your side....
4 min read
How Inbound Email Works in Buzzmark: MX Records, Forwarding, and Webhooks
Buzzmark does not just send. Point an MX record at us and we will receive mail for your domain, then forward it to your...