SendGrid "Delivered" but Email Not Received
Developers sometimes encounter situations where SendGrid reports a message as delivered but the recipient never receives the email.
This is a known limitation of how most email APIs report delivery status.
Why this happens
Email APIs that return 202 Accepted or report "delivered" are indicating that the transport layer accepted the message for processing — not that it reached the inbox.
After acceptance, the receiving mail server can still:
- Reject the message due to a full mailbox
- Filter it to spam
- Reject it based on domain reputation
- Return a deferred bounce hours later
Many APIs surface these outcomes asynchronously — or not at all.
What "delivered" usually means
In most email APIs, delivered or accepted means:
The message was submitted to the transport infrastructure.
It does not mean the recipient's mailbox accepted the message.
The full delivery flow
- Your API call returns
202 Accepted - Provider submits to SMTP transport
- Transport hands off to recipient's mail server
- Recipient's server either accepts or rejects
- Your application may or may not be notified
Steps 4 and 5 are where silent failures happen.
Common scenarios where this occurs
| Scenario | What happens | What you see |
|---|---|---|
| Mailbox full | Server rejects after acceptance | "Delivered" or no event |
| Spam filter | Message silently discarded | "Delivered" |
| Address doesn't exist | Bounce received hours later | Delayed webhook or silence |
| Domain reputation block | Policy rejection | "Delivered" from transport |
Deterministic delivery state
Truncus resolves and exposes terminal delivery state directly in the API response.
{ "status": "bounced", "reason": "mailbox_full" }
{ "status": "rejected", "reason": "spam_blocked" }
Your application receives the actual outcome — not the transport acceptance status.
Why this matters for certain email types
Silent delivery failures are especially problematic for:
- Password resets — user waits for email that never arrives
- Invoices and receipts — payment not confirmed
- Security alerts — critical notification missed
- Multi-tenant platforms — you can't distinguish your failure from a customer's invalid address
Systems that need to know whether the email was received need terminal delivery state, not transport acceptance.