Email Accepted Does Not Mean Delivered: SMTP Status Codes, Bounces, and DSN Explained
USpeedo
Knowledge Guides
23 Jul, 2026
In modern business applications, email delivery platforms support critical communications such as verification codes, order confirmations, billing notices, and marketing messages.
When an application submits an email to uSpeedo through the API or SMTP and receives a response such as 200 OK with a MessageId, it means only one thing:
uSpeedo has accepted the request and handed the message to its delivery system for further processing.
It does not mean that the message has reached the recipient's inbox.
Before an email reaches its destination, it may pass through the following stages:
- The application submits the message to uSpeedo.
- uSpeedo performs basic checks on the request, sender domain, content, and recipient.
- The message enters the delivery queue.
- uSpeedo establishes an SMTP connection with the receiving mail server.
- Gmail, Outlook, Yahoo, or an enterprise email gateway accepts, defers, or rejects the message.
- The receiving system applies authentication, reputation, content, security, and user-level filtering.
- The message enters the inbox, spam folder, quarantine, or generates a bounce.
To make this process observable, uSpeedo combines real-time SMTP replies, asynchronous bounce messages, Delivery Status Notifications (DSNs), and internal blocking rules to update the status of each message.
1. Why Does a Successful API Response Not Mean the Email Was Delivered?
A successful API response normally confirms that the request passed the platform's initial validation and was accepted for processing.
For example:
{
"Code": 0,
"Message": "OK",
"MessageId": "msg_987654321"
}
At this stage, the message may still encounter problems such as:
- The recipient address does not exist.
- The receiving server is temporarily rate-limiting traffic.
- The recipient's mailbox is full.
- The sending IP address or domain has a poor reputation.
- SPF, DKIM, or DMARC authentication fails.
- The content triggers an anti-spam policy.
- The receiving server initially returns
250 OKbut later generates an asynchronous bounce. - The message is delivered to spam or quarantine instead of the primary inbox.
For this reason, applications should not rely on the initial API response alone. They should also process delivery events, Webhook notifications, and SMTP diagnostic information.
2. The Five Core uSpeedo Email Delivery Statuses
The email lifecycle in the uSpeedo console and Webhook events can be represented by five core statuses.
| Status | Identifier | Meaning | Recommended action |
|---|---|---|---|
| Sent | Sent | The message entered the outbound delivery process or was accepted by the destination server, depending on the platform's status definition | Wait for subsequent events; do not treat it as inbox placement |
| Delivered | Delivered | uSpeedo received the delivery-success signal defined by the platform | Count it as delivered, but do not assume that it reached the primary inbox |
| Transient failure | Transient Failure | Delivery failed because of a temporary condition | Allow the platform to retry according to its retry policy |
| Hard bounce | Bounce | Delivery failed for a permanent reason | Stop retrying when appropriate and remove confirmed invalid addresses |
| Blocked | Blocked | uSpeedo stopped the message internally before submitting it to the destination ISP | Check suppression lists, blocklists, compliance rules, and account settings |
One distinction is especially important:
Delivereddoes not necessarily mean that the message reached the recipient's primary inbox.
Providers such as Gmail and Outlook may place an accepted message in the inbox, spam folder, a category tab, or quarantine based on sender reputation, authentication, content, recipient engagement, and personal filtering rules.
3. How SMTP Status Codes Affect Delivery
When uSpeedo delivers a message to a destination mail server, the two systems communicate through the Simple Mail Transfer Protocol (SMTP).
Under RFC 5321, an SMTP server returns three-digit reply codes during the connection and mail transaction:
2xx: The requested action completed successfully.3xx: More information or input is required.4xx: A temporary failure occurred; the request may succeed if retried later.5xx: A permanent failure occurred; the same request should not be repeated unchanged.
RFC 3463 defines more detailed enhanced status codes, including:
4.2.2
5.1.1
5.7.1
An enhanced status code has three components:
class.subject.detail
Enhanced codes provide more useful diagnostic information than basic replies such as 450 or 550, making them better suited for automated bounce classification and troubleshooting.
4. Temporary Delivery Failures: 4xx and Transient Failure
A 4xx reply means that the current delivery attempt did not succeed, but the same request may succeed later.
Common examples include:
| SMTP reply example | Possible cause |
|---|---|
421 Service not available | The destination server is temporarily unavailable or under maintenance |
450 Mailbox unavailable | The mailbox is temporarily unavailable or restricted |
451 Temporary local problem | An internal server error or temporary policy restriction |
452 Insufficient storage | The destination server has insufficient resources |
4.2.2 Mailbox full | The recipient's mailbox is full |
4.4.2 Bad connection | The SMTP connection timed out or was interrupted |
4.7.1 Try again later | Greylisting, throttling, or a temporary anti-spam policy |
uSpeedo may classify these results as:
Transient Failure
For temporary failures, a delivery platform will typically:
- Keep the message in its delivery queue.
- Retry it later using a backoff policy.
- Control connection concurrency and delivery rate for the affected ISP.
- Update the final status after reaching the maximum retry period or attempt limit.
The text associated with an SMTP reply can vary between providers. A classification system should therefore evaluate the basic reply, enhanced status code, Diagnostic-Code, destination domain, and stage at which the failure occurred.
5. Permanent Delivery Failures: 5xx and Bounce
A 5xx reply indicates that the SMTP request was permanently rejected. The sending system should generally not repeat the same request without changing the relevant address, content, authentication, or sender conditions.
Common examples include:
| SMTP reply example | Possible cause |
|---|---|
550 5.1.1 User unknown | The recipient mailbox does not exist |
550 5.1.2 Bad destination system address | The recipient domain or destination system address is invalid |
550 5.2.1 Mailbox disabled | The mailbox is disabled, suspended, or unable to receive mail |
552 5.2.2 Mailbox full | Some servers classify a full mailbox as a permanent failure |
550 5.7.1 Message rejected | The message was rejected by a security, authentication, content, or anti-spam policy |
554 5.7.1 Access denied | The sending source, content, or delivery policy was rejected |
After evaluating the SMTP stage, enhanced status code, and diagnostic text, uSpeedo can classify a permanent delivery failure as:
Bounce
Not Every 5xx Reply Should Permanently Suppress the Recipient
This is an important distinction in bounce management.
For example:
550 5.1.1 User unknown
This response strongly indicates that the recipient address is invalid. Adding the address to an account-level suppression list helps prevent repeated bounces.
However:
550 5.7.1 Message rejected
may indicate a problem with:
- Sending IP reputation
- Sending-domain reputation
- SPF, DKIM, or DMARC
- Message content
- Delivery frequency
- ISP policy
- A blocklist or secure email gateway
In this situation, the recipient address may still be valid. The platform should not permanently suppress it based solely on one policy rejection.
A reliable classification system should consider:
- The basic SMTP reply
- The enhanced status code
- The ISP's diagnostic text
- The recipient domain
- Historical delivery results
- The stage at which delivery failed
- Whether the response confirms an address-level permanent failure
6. Why Can an Email Bounce After a 250 OK Reply?
After receiving the complete message data, a destination server may return:
250 2.0.0 Message accepted for delivery
This response means that the receiving server accepted responsibility for the message.
It does not necessarily mean that:
- The message has already reached the user's mailbox.
- The message reached the primary inbox.
- The recipient account definitely exists.
- The message will pass every internal security scan.
Some receiving systems avoid confirming mailbox validity during the RCPT TO stage to reduce the risk of directory-harvesting attacks. They may initially accept the message and then inspect the recipient, content, and security conditions in an internal queue.
If the subsequent processing fails, the receiving system may send an asynchronous bounce to the message's envelope sender, commonly represented by the Return-Path.
This explains status transitions such as:
Sent → Bounce
or:
Sent → Transient Failure
7. What Is a Delivery Status Notification?
DSN stands for Delivery Status Notification.
RFC 3461 defines the SMTP extension used to request DSNs, while RFC 3464 defines a machine-readable DSN message format.
A standard DSN can describe:
- Successful delivery
- Delayed delivery
- Permanent delivery failure
- Transfer to an environment that may not support complete DSN reporting
A typical DSN uses the following top-level MIME type:
multipart/report; report-type=delivery-status
It normally includes:
- A human-readable explanation
- A machine-readable
message/delivery-statussection - An optional copy of the original message or its headers
The third section is optional and is not present in every DSN.
8. Example of a Standard DSN
The following is a simplified message/delivery-status example:
Reporting-MTA: dns; mx.target-isp.com
Received-From-MTA: dns; out.uspeedo.com
Arrival-Date: Fri, 17 Jul 2026 10:00:00 +0000
Original-Recipient: rfc822; invalid-user@example.com
Final-Recipient: rfc822; invalid-user@example.com
Action: failed
Status: 5.1.1
Diagnostic-Code: smtp; 550 5.1.1 User unknown
The uSpeedo parser can extract fields such as:
| Field | Purpose |
|---|---|
Reporting-MTA | Identifies the mail server that generated the DSN |
Original-Recipient | Contains the original recipient address |
Final-Recipient | Identifies the address associated with the final delivery result |
Action | Describes the result, such as failed, delayed, or delivered |
Status | Contains the enhanced status code, such as 5.1.1 |
Diagnostic-Code | Contains the detailed SMTP diagnostic response |
These structured fields are generally more reliable for automation than the human-readable text in a bounce message.
9. How VERP Associates a Bounce with the Original Email
To identify which original message generated an asynchronous bounce, an email platform can assign a trackable envelope return address to each message.
This technique is commonly known as Variable Envelope Return Path, or VERP.
The sender address displayed to the recipient may be:
sender@yourdomain.com
The SMTP MAIL FROM address—and therefore the resulting Return-Path—may instead be:
bounce+msg_987654321@bounce.uspeedo.com
Here:
msg_987654321
is a unique identifier that can be used to associate the bounce with the original delivery task.
It is important to distinguish between:
From: The sender address displayed in the recipient's email clientReturn-Path: The SMTP return address used primarily for bounce processing
These addresses may be different. The delivery platform must still configure SPF, DKIM, and DMARC correctly and maintain the required domain alignment.
10. The Asynchronous Bounce-Processing Flow
When a destination ISP generates a bounce, uSpeedo can process it through the following workflow.
1. Capture the bounce
The bounce-receiving system accepts DSNs and other bounce messages sent to uSpeedo's trackable envelope return addresses.
2. Find the original message
The system uses the VERP address, original Message-ID, recipient address, and other message fingerprints to locate the associated delivery task.
3. Parse the delivery result
The parser prioritizes structured fields such as:
Action
Status
Diagnostic-Code
Final-Recipient
Because not every provider generates a fully standards-compliant DSN, the parser may also need ISP-specific rules and diagnostic-text analysis.
4. Update the message status
The parsed result is stored in the delivery record and made available through the console or a Webhook event.
5. Apply bounce protection
For confirmed invalid addresses, such as those returning 5.1.1 User unknown, the platform may add the recipient to an account-level suppression list to prevent repeated hard bounces and protect sender reputation.
11. Mapping DSN Results to uSpeedo Delivery Statuses
The following table shows a common mapping model:
| DSN field | Status code | uSpeedo status | Meaning |
|---|---|---|---|
Action: failed | 5.x.x | Bounce | Permanent delivery failure |
Action: failed | 4.x.x | Transient Failure | Temporary failure or an unusual DSN result |
Action: delayed | 4.x.x | Transient Failure | The destination system has not completed delivery |
Action: delivered | 2.x.x | Delivered | The receiving system explicitly reported successful delivery |
Action: expanded | 2.x.x | Based on platform policy | The address was expanded through an alias or mailing list |
| Internal policy block | No external SMTP reply | Blocked | The message was not submitted to the destination ISP |
Action: expanded should not automatically be treated as Delivered. It indicates that an address was expanded or forwarded, not necessarily that every final recipient received the message.
12. How Developers Should Process Email Delivery Events
Applications sending verification codes, order confirmations, billing notices, or other transactional messages should implement an asynchronous delivery-status workflow instead of storing only the API response.
1. Store the MessageId
Associate the MessageId returned by uSpeedo with relevant business data, such as:
- User ID
- Order number
- Message type
- Recipient address
- Submission time
2. Configure Webhooks
Process status events such as:
Delivered
Transient Failure
Bounce
Blocked
3. Make Webhook processing idempotent
One message may generate multiple status events. Use the event ID, MessageId, event type, and timestamp to prevent duplicate updates or repeated business actions.
4. Separate address failures from policy failures
Do not classify every 5xx response as an invalid recipient:
5.1.1usually indicates that the address does not exist.5.2.1commonly indicates that the mailbox is disabled.5.7.1is more commonly associated with authentication, security, content, or sender-reputation policies.
5. Remove confirmed invalid recipients
Stopping delivery to addresses that produce confirmed hard bounces helps reduce the hard-bounce rate and protects sending-domain and IP reputation.
13. Frequently Asked Questions
Why did the recipient not receive the email even though the API returned 200 OK?
The API response confirms only that the platform accepted the request. The message may later be delayed, rejected, blocked, quarantined, or delivered to spam.
Does Delivered mean that the email reached the Gmail primary inbox?
No. Delivery and inbox placement are different measurements. An accepted message may appear in the spam folder, a category tab, or quarantine.
Will uSpeedo retry a transient failure?
A delivery platform will normally retry temporary failures according to its retry policy. The exact retry duration and number of attempts depend on the platform configuration and destination ISP response.
Does every 5xx response add the recipient to a suppression list?
It should not. Long-term suppression is appropriate when the response clearly confirms that the address is permanently invalid. A content- or reputation-related 5.7.1 response requires separate diagnosis.
Why do some bounce messages not use the standard DSN format?
Although the RFCs define a standard DSN structure, some mail systems still generate proprietary MIME structures or unstructured diagnostic text. Delivery platforms therefore need both standards-based parsing and ISP-specific compatibility rules.
Conclusion
Email delivery is not a single API operation. It is an asynchronous process that spans the sending platform, the public internet, destination ISPs, secure email gateways, and recipient mailboxes.
By combining real-time SMTP reply capture, enhanced status-code classification, VERP-based bounce correlation, asynchronous DSN parsing, and suppression-list protection, uSpeedo can turn a complex delivery path into observable and actionable status data.
Developers can use these results to:
- Determine whether the destination server accepted a message
- Separate temporary failures from permanent bounces
- Diagnose invalid recipients, authentication failures, and ISP policy rejections
- Maintain recipient lists automatically
- Reduce hard-bounce rates
- Protect sending-domain and IP reputation
- Improve overall email deliverability
A reliable email platform does more than send a message—it makes every delivery result traceable and explainable.




