Handling bounces on Amazon SES

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.

5 Comments

  1. Thomas says:

    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

    1. Colin Mackay says:

      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.

    2. tim says:

      bounces come back from MAILER-DAEMON@amazonses.com

      complaints come back from complaints@email-abuse.amazonses.com

      1. george says:

        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?

  2. george says:

    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?

Leave a Comment

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s