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.
The feedback pipeline
Section titled “The feedback pipeline”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 --> LambdaThe processor handles six event types:
| Event | Meaning |
|---|---|
| Send | SES accepted the message for delivery |
| Delivery | The recipient’s mail server confirmed receipt |
| Bounce | The message could not be delivered |
| Complaint | The recipient marked the message as spam |
| Reject | SES refused to send the message (e.g. virus detected) |
| DeliveryDelay | Delivery 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.
Bounces
Section titled “Bounces”A bounce means the email could not be delivered to the recipient’s mail server. SES distinguishes two kinds:
| Type | Meaning | Example causes |
|---|---|---|
| Permanent | The address is definitively unreachable | Address doesn’t exist, domain not found |
| Transient | A temporary failure; delivery may succeed later | Mailbox full, server temporarily unavailable |
What happens on a bounce
Section titled “What happens on a bounce”- The delivery status for each bounced recipient is updated on the submission record.
- A feedback entry is recorded for analytics and auditing.
- The suppression list is updated (see below).
- 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.
Suppression thresholds for bounces
Section titled “Suppression thresholds for bounces”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.
Complaints
Section titled “Complaints”A complaint means the recipient (or their mail provider) flagged the message as spam.
What happens on a complaint
Section titled “What happens on a complaint”- The delivery status for each complaining recipient is updated on the submission record.
- A feedback entry is recorded.
- 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
Section titled “The suppression list”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"| DThis protects the domain’s sender reputation with ISPs and prevents SES from suspending the account due to high bounce or complaint rates.
Suppression levels
Section titled “Suppression levels”| Type | Level | Reenable |
|---|---|---|
| Bounce — soft (< threshold) | Soft | Automatic after window |
| Bounce — permanent or threshold exceeded | Hard | After 7–30 days, or manual |
| Complaint — any | Permanent | Manual only |
Rejects
Section titled “Rejects”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.
Related topics
Section titled “Related topics”- Email Sending Pipeline — how outbound emails are submitted and delivered to SES.
- Email Processing Pipeline — how inbound mail is received and stored.
- Security Model — DKIM signing, SPF, and trust boundaries.