As application developers one of our primary methods of communication with our users is via email. As we all know, our emails contain highly valuable and important content to our users.
This includes things like account setup notifications, password reset instructions, marketing newsletters, and others. Our product here at Belly is no exception to this rule. Many of the features we’ve rolled out during the past year revolve around sending various types of email messages to our merchant and/or member users. At Belly this is additionally complex because we also send a healthy number of emails on behalf of our merchants (e.g. announcements, promotions, event invitations, etc). In light of this, it’s important to have confidence that emails sent from your system are reliably reaching the intended recipient.
It recently came to our attention that the delivery rates for many of our email messages were lower than desired. In response we began to investigate the factors causing this and worked to improve the delivery rates of emails across our system. This turned out to be an eye opening experience on a number of fronts. This is the first of a two part post to share the key lessons we learned along the way. The topic of email deliverability is a very deep and complex one, so we will only be able to scratch the surface of it in these posts.
The Email Delivery Pipeline
Before diving into the technical details of how to improve your email delivery rates, it’s important to have a firm understanding of the full breadth of the email delivery pipeline. The following are the key actors in this pipeline and the responsibilities of each:
- Sender (Your Application): Responsible for drafting the email message, including any attachments, and specifying the intended recipient. The sender often takes a first pass at filtering the messages to be sent to ensure emails are not delivered to unsubscribed, unverified, or other types of undesirable recipients.
- Sender’s Email Service Provider (Mandrill, SendGrid, SparkPost, etc): Responsible for processing the requested email send, identifying the recipient’s email service provider (ESP), and delivering the message to the appropriate server to reach the intended recipient. Commercial ESPs will often offer additional features to help manage and filter these requests, such as recipient blacklists, sender verification, etc.
- Recipient’s Email Service Provider (Gmail, Yahoo, Outlook, etc): Responsible for deciding whether or not to accept incoming messages, based on how likely they are to be spam, identifying the intended recipient, managing recipients’ email quotas, mailbox capacities, and configuration settings, and delivering emails into the recipients mailbox.
- Recipient (Your User): Responsible for managing their mailbox, reviewing messages, and responding to each message as they see fit.
As you can see, each party plays a distinct but crucial role in ensuring the message reaches the intended recipient. At each step there is the potential for the workflow to be interrupted, preventing the message from getting to its recipient. It is these error cases that drive down your delivery rate and will be the focus of the remainder of this post.
I have included the recipient in this outline to acknowledge the fact that “conversion” is the true metric we are interested in with all of our emails. The definition of a “conversion” will vary from email to email, but it would be a failure lose sight of this metric by focusing exlusively on deliverability. Delivery rates are a key segment of this funnel and are the specific section that we will be focusing on here.
One of the biggest contributing factors to the delivery rate of an application is the decisions it makes about which emails it attempts to send. We all make bad decisions from time to time. It’s our ability to learn from these mistakes that determines their long term impact on our reputation.
This seems obvious at an initial glance, but it is actually a fairly complex task to implement within an application. Actively managing and filtering the emails that a system attempts to send is a non trivial task that requires upfront design and ongoing maintenance to get right. The following are a few design considerations to be mindful of as you approach this task.
When a message fails to be delivered, your ESP will log this as a bounced message. Bounces come in two different varieties: hard bounces and soft bounces. Hard bounces tend to be permanent errors that will likely not be corrected with time (e.g. malformed email address, invalid domain, etc). Soft bounces on the other hand can often resolve themselves based on external factors (e.g. mailbox full, spam suspicion, etc). Your application should listen to these events via the API exposed by your ESP and use this information to determine whether or not future emails to this user or of this type should be delivered. This up front filtering can go a long way toward cutting down on your applications bounce rate and thereby improving your deliverability. Initially this doesn’t have to be a terribly complex algorithm, but as your sensitivity to bounced messages increases, you can continue to refine this logic to account for more fine grained errors and in doing so, achieve increased delivery rates.
In the case of a hard bounce, your application will likely want to stop sending to this user/recipient all together. This is not desirable since it shuts down a key mode of communication with this user. To address this we must look up stream and consider how this malformed data entered the system in the first place. In many systems this is user provided data and it can be very helpful to verify this information as part of their account setup. This can be done by integrating with service providers like Kickbox, or simply by sending a verification email to the provided address and requiring the user to click a link embedded within the message.
These are relatively simple steps that can have a significant impact on the quality of the emails you send. As we will see in the coming sections this is important for more than just to have confidence that the emails you attempt to send are actually reaching the intended recipients.
Google, Yahoo, and Microsoft are watching your every move! As ESPs for many of your recipients, they’re tracking the email you send to their users and building a profile for you as an email sender. Having a strong reputation with an ESP reduces the chances that they will reject your emails. On the contrary, having a weak reputation will result in your emails being rejected or delivered to a recipients spam mailbox more frequently.
In thinking about this it is also important to be aware that there are two different types of email sender reputations. IP based reputations are managed based on the IP address from which an email message originates. Domain based reputations are managed based on the domain of the from address in email message. Most recipient ESPs maintain information on both of these dimensions and there are different steps that can be taken to bolster your reputation on each front.
With the advent and increased adoption of IPv6 a wealth of new IP addresses have become available. This makes it easier for spammers to frequently change the IP addresses from which they send messages. While this makes it more difficult for ESPs to confidently identify spammers based on their IP reputation, having a well established reputation for your email sending IP address will continue to set you apart from the spamming community, who will likely be using IP addresses with no reputation, good or bad.
In light of this we still feel it is important to actively manage both forms of email reputation. In the sections below we’ll outline steps you can take to improve your reputation across both these dimensions and will also drill into additional options for improving each type of reputation individually.
With this foundational understanding of the email delivery process, you can now see how important it is to set your application’s messages apart from the wealth of spam traffic being sent to your users. In the next post we’ll dive deeper into the different types of sender reputations mentioned in the last section and will highlight some techniques that can be used to significantly improve reputation on each of these fronts. Stay tuned…