Email Infrastructure
Guide4 min read

SES Delivery Delay Events: When a Soft Failure Is Not a Bounce

SES Delivery Delay Events: When a Soft Failure Is Not a Bounce — Operators treating temporary delivery delays as permanent bounces.

RT
RepMail Team

Product & Engineering · September 25, 2026 · 4 min read

SES DeliveryDelay events indicate temporary delivery problems that SES treated as transient and will retry; they are not SMTP permanent bounces and should not be used alone to suppress recipients. Operators should classify DeliveryDelay events as retryable, collect correlated events (final Delivery, Bounce, or Complaint), and apply suppression only after observing a terminal failure or policy-confirmed bounce.

What a DeliveryDelay event means and its decision boundary

An SES DeliveryDelay event marks a temporary failure in delivering a message to a destination mail server; SES records the condition, continues internal retries, and may later produce a Delivery or Bounce event. This event is an intermediate signal — it communicates a retryable state rather than a terminal SMTP 5xx permanent bounce. Operators must treat this as a transient condition unless a subsequent terminal event is observed.

Decision boundary: do not suppress or mark an address as undeliverable solely on DeliveryDelay. Instead, treat DeliveryDelay like a retry-state flag and wait for a terminal event (Bounce/Complaint) or a defined policy timeout. This aligns with AWS event semantics and common SMTP retry practice 1.

Evidence you should collect before taking permanent action

Before suppressing or removing an address, collect the following correlated evidence: the final SES event (Delivery or Bounce), SMTP response codes when available, timestamped retry counts, and any Complaint events. These pieces show whether the transient condition resolved or escalated to a permanent failure.

Limitations: SES DeliveryDelay does not always include full SMTP verbatim responses or final status codes in the event payload; you may need to enable additional logging or event publishing to capture more detail. RFC 3463 provides the conceptual mapping of enhanced status codes but SES event payloads and your logging may vary 2.

Practical sequence for handling DeliveryDelay events

  1. On DeliveryDelay, increment a transient-failure counter for the recipient and place the address into a short hold state (e.g., 24–72 hours) rather than immediate suppression. 2) Monitor for a terminal event: if a Bounce or Complaint follows within your hold window, apply suppression based on your existing bounce policy. 3) If a Delivery event follows, clear the transient state and resume normal sending.

Stop conditions: end the hold early if you observe a definitive terminal bounce or complaint; expire the hold and resume sends after your policy timeout if only DeliveryDelay events were seen and no terminal event materialized.

How to use SMTP code and SES event fields to decide

When an SES event includes SMTP reply codes or enhanced status codes, use them to escalate: a 5.x.x SMTP response (or enhanced status code beginning with 5) indicates a permanent failure and justifies suppression after confirming the Bounce event. A 4.x.x or enhanced 4.x.x signifies a temporary failure and should be treated as retryable.

Evidence limits: SES DeliveryDelay sometimes lacks explicit SMTP codes. If codes are missing, rely on the temporal pattern (retries and final event) and your hold window rather than inferring permanence from the DeliveryDelay alone.

Operational roles, monitoring, and automation recommendations

Assign a delivery-owner (engineer or ops) to maintain the DeliveryDelay policy and to tune hold windows based on observed retry-to-terminal event ratios. Instrument dashboards to show counts of DeliveryDelay → Delivery, DeliveryDelay → Bounce, and DeliveryDelay with no follow-up within the policy window.

Automation: implement an event consumer that tags addresses on DeliveryDelay, triggers follow-up checks, and only writes to suppression lists when you receive a Bounce/Complaint or when the hold window expires with a configured decision. Keep manual override options for critical recipients.

Practical checklist

  • Do not add recipients to permanent suppression on receipt of a DeliveryDelay event alone.
  • Enable SES event publishing (CloudWatch/EventBridge/SNS) to capture DeliveryDelay and follow-up events 1.
  • Log SMTP reply codes and enhanced status codes where available; map 4.x.x vs 5.x.x to retryable vs permanent actions 2.
  • Create a 24–72 hour hold state for recipients with DeliveryDelay instead of immediate suppression.
  • Monitor and dashboard the outcome ratios: DeliveryDelay→Delivery, DeliveryDelay→Bounce, DeliveryDelay→no-follow-up.
  • Only write to suppression lists after receiving a Bounce or Complaint or after a documented policy timeout.
  • Provide manual review or white-listing for high-value recipients during the hold period.
  • Instrument retry counters and timestamps to determine whether the SES retry process completed.
  • Periodically review and tune the hold window based on observed outcomes and business impact.

Where RepMail fits

Use this guide as a decision aid when wiring outbound automation: implement the short hold and verification flow described here in your event consumer and suppression logic to prevent premature removals. RepMail users can copy the checklist and diagnostic table into their outbound workflows to ensure DeliveryDelay is treated as a transient signal and only terminal events drive permanent suppression.

Continue with Amazon SES Account-Level Suppression: How to Use It for the next step in the workflow.

Related RepMail guides

Sources

Resources in this guide

DeliveryDelay decision/diagnostic table
Reference
Observed signalImmediate meaningAction (0–72h)Terminal evidence required
DeliveryDelay event onlyTemporary failure noted; SES will retryPlace address in short hold (24–72h); do not suppressDelivery or Bounce/Complaint event
Delivery event after DeliveryDelayMessage delivered successfullyClear hold, resume normal sendsDelivery event timestamp
Bounce event after DeliveryDelay (5.x.x)Permanent failure indicatedApply suppression per policy immediatelyBounce event with 5.x.x or explicit permanent status
Bounce event after DeliveryDelay (4.x.x)Bounce declared but categorized as temporaryConsider temporary suppression or retry policy; inspect improved delivery attemptsBounce event and SMTP code indicating 4.x.x
No follow-up event within hold windowUnresolved transient stateApply policy: either resume sends or escalate to manual reviewExpiration of hold window (policy-defined)

Common mistakes to avoid

  • Skipping this check: Do not add recipients to permanent suppression on receipt of a DeliveryDelay event alone.
  • Skipping this check: Enable SES event publishing (CloudWatch/EventBridge/SNS) to capture DeliveryDelay and follow-up events [1].
  • Skipping this check: Log SMTP reply codes and enhanced status codes where available; map 4.x.x vs 5.x.x to retryable vs permanent actions [2].
infrastructure
ses
bounce
email
delivery
delay
events

Frequently asked questions

Can I treat DeliveryDelay as a bounce to avoid duplicate sends?

No. Treating DeliveryDelay as a bounce risks premature suppression and lost recipients. Use a short hold window to prevent duplicate or excessive sends while waiting for a terminal event (Delivery/Bounce/Complaint). If you need to avoid duplicates immediately, deduplicate at the send-queue level rather than suppressing addresses.

If SES doesn’t provide SMTP codes in DeliveryDelay, how should I decide?

If codes are missing, rely on temporal evidence and your hold policy: tag the address as transient and wait for a follow-up event or the hold window to expire. Consider enabling more detailed logging or event publishing for richer data if your workflow requires immediate classification [1].

How long should the hold window be?

There is no one-size-fits-all interval; common practice is 24–72 hours. Choose a window that balances business urgency and risk of premature suppression, then tune it based on observed rates of DeliveryDelay resolving to Delivery versus Bounce. State your uncertainty: exact optimal timing depends on your sending cadence, recipient importance, and observed SES retry behavior.

Continue learning

Continue with Amazon SES Account-Level Suppression: How to Use It

Use the adjacent guide to continue the investigation or implementation.

More on this topic