Simulating SES Bounce, Complaint, and Reject Events
Triggering SES bounce, complaint, and reject notifications with simulator addresses, without sending real mail to any recipient.
Amazon SES provides simulator addresses for testing how an application handles bounce, complaint, and reject notifications without sending email to real recipients. See the official documentation for details.
Prerequisites
Before starting, complete the following:
- Verify an email address in Amazon SES.
- Enable Email Feedback Forwarding for the registered email address.

Simulating Bounce
A bounce can be simulated with:
aws ses send-email \ --from <YOUR_EMAIL> \ --subject test \ --text testYou will receive an email at the address specified by the --from option, indicating a bounce occurred.

Simulating Complaint
A complaint follows the same pattern, targeting a different simulator address:
aws ses send-email \ --from <YOUR_EMAIL> \ --subject test \ --text testAn email indicating a complaint will be sent to the --from address.

Simulating Reject
A reject requires sending an email with an EICAR test file attachment, which SES’s virus scanning flags:
FROM=<YOUR_EMAIL>MESSAGE='{"Data": "From: $FROM\nTo: $FROM\nSubject: test\nMIME-Version: 1.0\nContent-type: Multipart/Mixed; boundary=\"NextPart\"\n\n--NextPart\nContent-Type: text/plain\n\ntest\n\n--NextPart\nContent-Type: text/plain;\nContent-Disposition: attachment; filename=\"sample.txt\"\n\nX5O!P%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*\n\n--NextPart--"}'MESSAGE=$(echo $MESSAGE | sed "s/\$FROM/$FROM/g")aws ses send-raw-email \ --cli-binary-format raw-in-base64-out \ --raw-message "$MESSAGE"You will receive a rejection notification email at the FROM address.

Conclusion
The SES mailbox simulator can trigger bounce, complaint, and reject notifications without sending email to real recipients.
The [email protected] and [email protected] addresses work with a standard send-email call, making it easy to test these notification paths during development.
The reject case requires send-raw-email and a MIME payload containing an EICAR test attachment. Test this path separately rather than assuming that bounce-handling code will also process a virus-scan rejection correctly.
Related posts
Sign in with Slack Using Cognito User Pools and OIDC
Federating Cognito user pools with Slack over OIDC and wiring "Sign in with Slack" into a Next.js app with Amplify.
Deploying FastAPI on AWS Lambda with Lambda Web Adapter
Containerizing a FastAPI backend and deploying it to a single Lambda function with Lambda Web Adapter and AWS CDK.
API Gateway WebSocket: Implementing a Mock Integration
Building an API Gateway WebSocket API entirely with mock integrations, returning canned responses with no backend Lambda involved.
Uploading to S3 Through CloudFront Signed URLs
CloudFront signed URLs let you upload to S3 through a custom domain—useful when direct S3 pre-signed URLs are not an option.
AWS EventBridge Scheduler: Starting and Stopping EC2 on a Schedule
Starting and stopping EC2 instances on a cron schedule with EventBridge Scheduler calling the EC2 API directly, no Lambda involved.
