Skip to content

Bounce & Complaint Handling

When you send an email, SES reports back on what happened to it. These feedback events — bounces, complaints, deliveries, rejects — are the mechanism the system uses to track delivery status and protect sender reputation over time.


SES publishes all outbound feedback events to an SNS topic. The same SNS → SQS → Lambda pattern used for inbound mail applies here:

graph LR
SES["Amazon SES"]
SNS["SNS Topic"]
SQS["SQS Queue"]
Lambda["Lambda<br/>sqs-ses-event-processor"]
SES -->|"bounce / complaint /<br/>delivery / send / reject"| SNS
SNS --> SQS
SQS --> Lambda

The processor handles six event types:

EventMeaning
SendSES accepted the message for delivery
DeliveryThe recipient’s mail server confirmed receipt
BounceThe message could not be delivered
ComplaintThe recipient marked the message as spam
RejectSES refused to send the message (e.g. virus detected)
DeliveryDelayDelivery is delayed; SES will keep retrying

Each event updates the delivery status on the corresponding submission record so the sender can see what happened to every recipient.


A bounce means the email could not be delivered to the recipient’s mail server. SES distinguishes two kinds:

TypeMeaningExample causes
PermanentThe address is definitively unreachableAddress doesn’t exist, domain not found
TransientA temporary failure; delivery may succeed laterMailbox full, server temporarily unavailable
  1. The delivery status for each bounced recipient is updated on the submission record.
  2. A feedback entry is recorded for analytics and auditing.
  3. The suppression list is updated (see below).
  4. For permanent bounces, a notification email is placed in the sender’s inbox so they know the message was not delivered.

Transient bounces do not generate a notification email on their own — only if they accumulate to the point of triggering suppression.

The system tracks bounce history per recipient and escalates the suppression level automatically:

  • Any permanent bounce → recipient is suppressed immediately. The suppress window is 30 days for recoverable subtypes (general failures, full mailboxes), or indefinite for unrecoverable ones (address does not exist).
  • 5 or more soft bounces within a 24-hour window → escalated to the same level as a hard bounce, with a 7-day suppress window.

A complaint means the recipient (or their mail provider) flagged the message as spam.

  1. The delivery status for each complaining recipient is updated on the submission record.
  2. A feedback entry is recorded.
  3. The recipient is permanently suppressed — complaints result in immediate, indefinite suppression with no automatic reenable.

Suppression is tracked per message class (transactional, mailing list, bulk). If the system cannot determine the message class from the original submission, the complaint is applied to all classes.


The suppression list is the system’s memory of problematic recipients. Before any outbound email is sent, the sender’s sending path checks the list. A suppressed recipient will not receive mail until the suppression expires or is manually cleared.

graph TD
A["Outbound send request"]
B{"Recipient suppressed?"}
C["Reject send — protect reputation"]
D["Continue with delivery"]
A --> B
B -->|"Yes"| C
B -->|"No"| D

This protects the domain’s sender reputation with ISPs and prevents SES from suspending the account due to high bounce or complaint rates.

TypeLevelReenable
Bounce — soft (< threshold)SoftAutomatic after window
Bounce — permanent or threshold exceededHardAfter 7–30 days, or manual
Complaint — anyPermanentManual only

A rejection means SES refused to process the message before it left the system — typically because a virus was detected. The submission is marked as not delivered and a notification email is placed in the sender’s inbox, similar to a permanent bounce.