Email Bounce Management — SMTP Replies & Enhanced Status Codes

Photo by Christian Wiediger on Unsplash

Deliverability is a way to measure the success at which an email marketer gets a campaign into subscribers’ inboxes. It is impacted by things like ISPs (internet service providers), MTAs (mail transfer agents), throttling, spam, bounces and bulking. In this post, I want to touch on bounces.

A subscriber is marked as “bounced” when their receiving email server rejects an email that you send. This rejection can mean that the email address is invalid or their inbox is inaccessible at the time of send.

ISPs send messages back to Salesforce Marketing Cloud reflecting the response provided by the recipient’s server explaining why they cannot deliver your email. Interpreting these bounce responses helps you understand why your message bounced and how to fix the problem.

Breaking Down Bounce Rates

  • Bounce Rate: The percentage of total emails sent that could not be delivered to the recipient’s inbox. There are two types of bounces — a hard bounce and a soft bounce. The main differentiator between the two is that hard bounces are permanent and emailing to them should not be attempted again, whereas soft bounces are temporary and can be re-tried.
  • Soft Bounce: result of a temporary problem with a valid email address, such as a full inbox or a problem with the recipient’s server. The recipient’s server may hold these emails for delivery once the problem clears up, or you may try re-sending your email message. Generally speaking, bounces that begin with a 4xx explanation are considered soft or transient delivery failures. This means they can be reattempted for delivery and may still have a chance of being accepted by the receiving domain…at a later time.
  • Hard Bounce: result of an invalid, closed or non-existent email address. These emails will never be successfully delivered. You should immediately remove hard bounce addresses from your list because ISPs use bounce rates as a key factor to determine sender reputation. Having too many hard bounces can make your company look like a spammer in the eyes of an ISP. If a bounce begins with a 5xx code and message pertaining to a permanent failure, then it is considered a hard bounce. Reattempting delivery of these bounces is not likely to succeed and may in fact do further damage to a sender’s reputation.

Data View: Bounce

The bounce data view can be queried in Automation Studio to retrieve detailed information surrounding all bounces from Marketing Cloud sends.

There are a number of fields in this data view that can be difficult to interpret. For example, what exactly is an SMTP Reply Code? How is it different to an Enhanced Status Code? How should I filter my queries to isolate certain types of bounces?

What is an SMTP Response Code?

When you send an email, the receiving mail server returns a code indicating the status of the message delivery. This is known as an “SMTP response code” and is part of the normal email sending process. A bounce is logged by interpreting the specific response code that relates to unsuccessful message delivery.

Each SMTP call you make returns a response. Generally, 200 and 300 response codes are normal response codes that do not indicate an error. 400 responses are usually soft bounces. 500 responses are hard failures.

With soft bounces, SFMC retries sending the email to the subscriber every 15 minutes for 72 hours, for up to 288 tries. Only after the system stops attempting to retry does a subscriber appear in your tracking as Bounced.

Breaking Down SMTP Codes

Nowadays, SMTP responses can be broken up into three parts:

  1. Basic status code
  2. Enhanced status code
  3. Reply message
Source: https://support.google.com/a/answer/3221692
  • Reply Code / Basic Status Code: first defined in 1982 (see RFC 821), this response is limited to three digits. They are also referred to as basic status codes since “enhanced status codes” were created 14 years later. This response is used to communicate the success or failure of every SMTP command. This value is returned by selecting the SMTPCode column from the _Bounce data view in your SQL.
  • Enhanced Status Code: defined in 1996 and expands upon the basic status code, it uses a series of 3 digits separated by decimal points. The enhanced status code offers more granularity and answers the larger question “tell me why my email delivery failed?” This value is returned by selecting the SMTPBounceReason column in your SQL.
  • Reply Message: the text string regarding the bounce relayed by the mail system. This message is meant for human consumption, while the codes are typically meant to be read by machines.
SMTPCode ⟺ Basic Status Code
SMTPBounceReason ⟺ Enhanced Status Code

Marketing Cloud’s own defined bounce codes

The below fields are Marketing Cloud defined codes based on the “smtp” data sent from the recipients Mail Transfer Agent:

  • BounceCategory
  • BounceCategoryID
  • BounceSubcategory
  • BounceSubCategoryID

Where can I see what each response means?

I have compiled all the status codes in the workbook below.

Email bounce reasons and descriptions

The above slides can also be downloaded here: https://github.com/charliefay/smtp_bounce_codes/blob/master/Email%20bounce%20reasons%20and%20descriptions.pdf

Deciphering why an email bounced

Part of the inherent problem with SMTP codes is that different servers use the same reply codes in various ways, making it incredibly difficult to state with certainty the meaning of each code.

When doing any bounce investigation it is best to take a holistic approach. Rather than simply looking at one status code by itself (eg: BounceSubCategoryID) your best approach would be to interpret ALL the reply codes holistically to better understand the cause.

The below query will join the All Subscribers list with the bounce data view to return log all “block bounces”.

Do you have anything to add? Reach out or leave a comment below.

I am a certified Salesforce Marketing Cloud Consultant at Bower House Digital in Melbourne, Australia.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store