Question

I'm sending emails with Amazon SES and processing notifications with SNS. I just realized that I have been processing OOTO messages as bounces and I would like to fix that so I properly distinguish the two.

Both OOTO and bounce notifications have "notificationType":"Bounce".

There must be some other information in the notification that allows you to distinguish bounces and OOTOs, but I can't find this documented anywhere. Has anyone figured this out?

Was it helpful?

Solution

Providing some additional information to help others. Below are example messages received from the SES simulator for the email addresses ooto@simulator.amazonses.com, bounce@simulator.amazonses.com, and suppressionlist@simulator.amazonses.com. Also below is message corresponding to an OOTO email in production, which is different from what is simulated.

Looks like you can use "bounceType" to distinguish OOTO from bounces, but would be nice to get clarity from the SES team. In my opinion, OOTO messages should not be treated as bounces.

OOTO from simulator:

{
u'mail': {
  u'timestamp': u'2013-09-01T17:21:23.000Z', 
  u'destination': [u'ooto@simulator.amazonses.com'], 
  u'source': u'sender@example.com', 
  u'messageId': u'...'}, 
u'notificationType': u'Bounce', 
u'bounce': {
  u'bounceType': u'Transient', 
  u'bounceSubType': u'General', 
  u'bouncedRecipients': [{u'emailAddress': u'ooto@simulator.amazonses.com'}], 
  u'feedbackId': u'...', 
  u'timestamp': u'2013-09-01T17:21:24.000Z'}
}

OOTO in production:

{
u'mail': {
  u'timestamp': u'2013-09-01T18:45:10.000Z', 
  u'destination': [u'ooto@example.com'], 
  u'messageId': u'...', 
  u'source': u'sender@example.com'}, 
u'notificationType': u'Bounce', 
u'bounce': {
  u'bouncedRecipients': [], 
  u'bounceType': u'Undetermined', 
  u'bounceSubType': u'Undetermined', 
  u'feedbackId': u'...', 
  u'timestamp': u'2013-09-01T18:45:11.000Z'}
}

Bounce from simulator:

{
u'mail': {
  u'timestamp': u'2013-09-01T17:21:20.000Z', 
  u'destination': [u'bounce@simulator.amazonses.com'], 
  u'messageId': u'...', 
  u'source': u'sender@example.com'}, 
u'notificationType': u'Bounce', 
u'bounce': {
  u'bounceType': u'Permanent',
  u'bounceSubType': u'General', 
  u'bouncedRecipients': [{u'action': u'failed', u'status': u'5.1.1', u'diagnosticCode': u'smtp; 550 5.1.1 user unknown', u'emailAddress': u'bounce@simulator.amazonses.com'}], 
  u'feedbackId': u'...', 
  u'timestamp': u'2013-09-01T17:21:20.767Z', 
  u'reportingMTA': u'dsn; a8-96.smtp-out.amazonses.com'}
}

Bounce in production:

{
u'mail': {
  u'timestamp': u'2013-09-02T13:39:02.000Z', 
  u'destination': [u'recipient@example.com'], 
  u'messageId': u'...', 
  u'source': u'sender@example.com'}, 
u'notificationType': u'Bounce', 
u'bounce': {
  u'feedbackId': u'...', 
  u'timestamp': u'2013-09-02T13:38:57.000Z', 
  u'reportingMTA': u'dns; b232-135.smtp-out.amazonses.com', 
  u'bounceSubType': u'General', 
  u'bouncedRecipients': [{u'status': u'5.0.0', u'diagnosticCode': u"smtp; 5.1.0 - Unknown address error 550-'Requested action not taken: mailbox unavailable' (delivery attempts: 0)", u'emailAddress': u'recipient@example.com', u'action': u'failed'}], 
  u'bounceType': u'Permanent'}
}

Suppression list from simulator:

{u'mail': {
  u'timestamp': u'2013-09-01T17:21:31.000Z', 
  u'destination': [u'suppressionlist@simulator.amazonses.com'], 
  u'messageId': u'...', 
  u'source': u'sender@example.com'}, 
u'notificationType': u'Bounce', 
u'bounce': {
  u'bounceType': u'Permanent',
  u'bounceSubType': u'Suppressed', 
  u'bouncedRecipients': [{u'status': u'5.1.1', u'emailAddress': u'suppressionlist@simulator.amazonses.com', u'diagnosticCode': u'Amazon SES has suppressed sending to this address because it has a recent history of bouncing as an invalid address. For more information about how to remove an address from the suppression list, see the Amazon SES Developer Guide: http://docs.aws.amazon.com/ses/latest/DeveloperGuide/remove-from-suppressionlist.html ', u'action': u'failed'}],
  u'feedbackId': u'...', 
  u'timestamp': u'2013-09-01T17:21:32.620Z', 
  u'reportingMTA': u'dns; amazonses.com'}
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top