If you send to an email that does not exist, Amazon SES will perform some handling of the bounce before passing the details on to you.
When you send email through Amazon SES you may notice that the email arrives with a Return Path that looks something like this: 00000331b8b1d648-b8302192-701f-124d-a1d5-d268912677de-135246@email-bounces.amazonses.com
As it happens, the large delimited hex number before the @ sign is the same value that you got back from the SendEmail
or SendRawMail
response. (If you’re unfamiliar with sending an email see previous posts on SendEmail
and SendRawEmail
.)
// client is a AmazonSimpleEmailServiceClient // request is a SendEmailRequest SendEmailResponse response = client.SendEmail(request); string messageId = response.SendEmailResult.MessageId;
When the email bounces, it will go first to Amazon SES where they will note which email bounced. Then the email will be forwarded on to you and you will receive the bounced email. (Be aware, tho’, that the email may end up in your spam folder – they did for me). Exactly where the bounce email will go depends on the API call you are using and the fields that you have populated in the outgoing email. The rules are detailed on the Bounce and Complaints notifications page of the Amazon SES Developer’s Guide.
If you look in the headers of this email you’ll see that Message Id again in various parts of the header. e.g.
X-Original-To: 00000331b8b1d648-b8302192-701f-124d-a1d5-d268912677de-135246@email-bounces.amazonses.com Delivered-To: 00000331b8b1d648-b8302192-701f-124d-a1d5-d268912677de-135246@email-bounces.amazonses.com Message-Id: <00000331b8b1d648-b8302192-701f-124d-a1d5-d268912677de-135246@email.amazonses.com>
How you process these bounces on your side is up to you. Amazon do not, yet (I’m hopeful they will and it has been requested a lot) provide an automated way of using the API for querying which emails are bouncing, are complained about or are rejected.
At present the best detail you are going to get on bounced emails is in the aggregate data provided through the GetSendStatistics
API call or via the graphs on the AWS Console.
What happens if I send more email to an address that bounced?
If you continue to send emails to an address that bounces you will get a MessageRejectedException
when you call SendEmail
or SendRawEmail
with the message “Address blacklisted.”
Conclusion on bounce handling
At present bounce handling using Amazon SES isn’t great (but it’s certainly no better than using a plain old SMTP service) however Amazon do appear to be interested in providing better support for handling bounces and the like. It may very well be better supported in the future.
Great article.
How do you distinguish between a bounce and a complaint? When I tried to send an email via SES to a non-existing email address I will get a reply from SES to the reply to address in the email where the from address contains the word bounces. I can use that information to identify a bounce.
Do you know if a complaint is handled the same way? Does the from address contain the word complaint? Is there a another way to distinguish between the two?
Thanks
I’m not actually sure how to distinguish between a bounce and a complaint as I’ve never received a complaint. I’ve also not found any documentation on Amazon itself as to what to look for. If you do found out, it would be great if you reply back and let me know as I’ve wondered that myself.
bounces come back from MAILER-DAEMON@amazonses.com
complaints come back from complaints@email-abuse.amazonses.com
In some circumstance bounces come back from MAILER-DAEMON@amazonses.com, but in another from MAILER-DAEMON@email-bounces.amazonses.com. What does it depend on?
SendEmailResponse response = client.SendEmail(request);
string messageId = response.SendEmailResult.MessageId;
What is the type of MessageId in the code above? Is it GUID or any string?