Amazon SES enforces two hard ceilings on every account: a 5% bounce rate and a 0.1% complaint rate. Cross either one and AWS will put your account under review; persistent rates above 10% bounces or 0.5% complaints can pause sending entirely (AWS, Amazon SES FAQ, retrieved 2026-06-07). The mechanism that keeps you below those thresholds is bounce and complaint handling: an automated pipeline that receives notifications from SES, identifies problematic addresses, and suppresses them from all future sends.
Without this pipeline in place, you're sending blind. Bounces and complaints accumulate, your rates climb, and AWS eventually restricts your account. This guide covers the exact setup - SNS topics, SES configuration sets, and webhook handling - plus what to do when your rates are already elevated.
Key Takeaways
- Amazon SES routes bounce and complaint data to Amazon SNS topics that you configure. Your application or marketing frontend subscribes to those topics.
- Hard bounces must be suppressed immediately - sending to them again worsens your reputation and wastes money.
- AWS publishes two thresholds for each rate: 5% bounce / 0.1% complaint (recommended), and 10% bounce / 0.5% complaint (above which sending may be paused).
- SES maintains an account-level suppression list automatically for hard bounces - but your frontend tool needs its own list too.
How Amazon SES Bounce and Complaint Notifications Work
When SES delivers an email and receives a bounce or complaint notification back from the receiving mail server, it routes that event through one of two channels:
Email feedback forwarding: SES emails a copy of the bounce/complaint notification to the feedback address you configured during identity setup. This is enabled by default but is not suitable for automated suppression at scale - it requires manual reading and action.
Amazon SNS notifications: SES publishes bounce/complaint events to Amazon SNS topics, which then deliver them to your subscribed endpoints (HTTP webhooks, Lambda functions, SQS queues, or email). This is the correct setup for any automated suppression system.
Switch from email forwarding to SNS as soon as your setup is past basic testing. Email forwarding doesn't scale, and it's easy to miss.
SNS Setup: Step by Step
Create SNS Topics
In the AWS Management Console, navigate to Amazon SNS → Topics → Create topic.
Create two topics:
ses-marketing-bouncesses-marketing-complaints
Select Standard type (not FIFO). Standard topics support HTTP/HTTPS subscriptions and deliver in near-real-time.
Create SES Configuration Set
In the SES console → Configuration → Configuration Sets → Create Configuration Set.
Name it something descriptive, e.g., marketing-sends. This configuration set will be referenced in every send you make.
Within the configuration set, click Add Destination and create two event destinations:
Bounce events → SNS destination → select
ses-marketing-bouncesComplaint events → SNS destination → select
ses-marketing-complaints
Save both.
Subscribe Your Endpoint to the SNS Topics
Go to your SNS topic → Create Subscription. Select HTTPS and enter your endpoint URL (your marketing frontend's webhook URL, or your application's bounce handler endpoint).
SNS will send a confirmation request to your endpoint. Your endpoint must confirm the subscription by making a GET request to the SubscribeURL in the confirmation message.
Using a marketing frontend: Most SES frontends ship a webhook URL and let you confirm the SNS subscription on their side. Mailblast is slightly different - once you paste an IAM access key into AWS Settings, it provisions its own SNS topics and subscribes itself, so there is no webhook URL to copy around. The effect is the same: suppression, list updating and reporting all happen automatically. See How Mailblast handles bounces.
Using Your Configuration Set When Sending
The SNS routing only works for sends that reference your configuration set. When sending via SMTP, include the configuration set name in the X-SES-CONFIGURATION-SET header:
X-SES-CONFIGURATION-SET: marketing-sends
When sending via the SES API, pass the ConfigurationSetName parameter:
{
"ConfigurationSetName": "marketing-sends",
...
}
Most marketing frontends let you specify the configuration set once in settings and apply it to all sends automatically.
Understanding Bounce Types
Not all bounces are equal. SES classifies them in the notification payload - see Soft and Hard Bounces for how Mailblast treats each.
Hard bounces (Permanent): The email address doesn't exist, the domain doesn't exist, or the receiving server has permanently rejected the address. Suppress immediately and never send again. Examples: 550 5.1.1 The email account does not exist, 550 5.4.1 Recipient address rejected.
Soft bounces (Transient): Temporary delivery failure - mailbox full, server temporarily unavailable, rate limiting. SES retries soft bounces automatically for up to 72 hours. If they still fail, they convert to a permanent failure. Mailblast keeps soft-bouncers on your list but escalates them to a hard bounce if the same address fails 3 times in a 4-week window.
Undetermined bounces: SES couldn't determine the bounce type from the server response. Treat these as soft bounces and monitor for patterns.
Handling Spam Complaints
A spam complaint occurs when a recipient clicks "Mark as spam" or "Report junk" in their email client. Gmail, Outlook, and Yahoo relay these complaints back to SES through feedback loops.
When you receive a complaint notification:
Suppress the address immediately - don't wait; never send to them again
Don't try to determine why - even if you believe the complaint was accidental, sending again after a complaint is a deliverability risk
Review the send that generated the complaint - if you see a spike in complaints after a specific campaign, investigate that campaign's content, targeting, and list segment
Complaint rate formula: (complaints / delivered emails) × 100. AWS's recommended ceiling is 0.1% - for 10,000 delivered emails, that works out to no more than 10 complaints per send before you cross the line AWS wants you to stay under (AWS SES FAQ, retrieved 2026-06-07). For more on what triggers a complaint in the first place, see What is a Spam Complaint?.
What to Do When Your Rates Are Already High
If your bounce rate is above 5% or your complaint rate is above 0.1%, stop sending and diagnose before continuing.
High bounce rate causes:
Purchased or rented email list - see Why you should not send to purchased lists
Old list that hasn't been cleaned in 12+ months
Form without email validation allowing fake signups
Missing double opt-in confirmation
High complaint rate causes:
Sending to subscribers who don't remember opting in
Sending too frequently without permission for that frequency
Sending content that doesn't match what subscribers signed up for
Missing or broken unsubscribe link
Resolution:
Clean the list: remove anyone who hasn't engaged in 12+ months - Mailblast's engagement-based targeting makes this a one-checkbox segment.
Enable double opt-in for all new signups going forward.
Review unsubscribe link visibility and functionality.
Consider a re-permission campaign to remaining list before resuming regular sends.
If AWS has already suspended you, see the appeal playbook in Handling AWS SES Suspensions.
Frequently Asked Questions
What is the Amazon SES complaint rate limit?
AWS publishes two thresholds: 0.1% recommended (stay below) and 0.5% (above this, your account may be paused). Once your rolling rate crosses the recommended line, AWS may put your account under review and email you a warning (AWS SES FAQ, retrieved 2026-06-07). For a list of 10,000, the 0.1% ceiling works out to 10 spam complaints per send.
How do I set up bounce handling in Amazon SES?
Create Amazon SNS topics for bounces and complaints, create a SES Configuration Set with those topics as event destinations, and subscribe your application (or marketing frontend webhook) to the SNS topics. Use the configuration set name when sending so that SES routes events through the correct topics.
Does Amazon SES automatically suppress bounced addresses?
SES maintains an account-level suppression list for hard bounces - it won't attempt to deliver to those addresses again even if you include them in a send. However, your marketing frontend needs its own suppression list as well so that those addresses don't appear in your campaigns or count toward your list size metrics.
What should I do if my Amazon SES account is suspended?
If AWS suspends your sending, you'll receive a notification. Submit a support request explaining the issue, the remediation steps you've taken (list cleaning, double opt-in implementation, bounce handling setup), and your plan to maintain compliance going forward. Most suspensions can be lifted after demonstrating corrective action.