It’s 2023 and we have spent about a year building Pendable - yet another email-sending service (YAESS). Well technically Pendable is not a new MTA, we use Amazon SES to send emails, but we built an entire system to handle the nuances around SES and add some missing features to SES that we sorely missed.

To be honest, we love SES. We love how price-effective it is. We love how robust it is and how it makes you strive hard to keep your email lists clean and your bounce rate low. We have been using it for 12+ years and it has never failed us.

But SES is hard to work with - it is a demanding task to set up all the infrastructure to add features you need for a production-grade SES setup. With that, I mean:

  • Monitoring your Bounce and Complaint rate and actively throttling email requests to SES once you detect a spike in either of these rates. (Fail to monitor and act on these rate alerts and you will soon not be able to send any more emails.)
  • Ability to schedule send emails in the future and dynamically order the queue as I enter new emails into it. This is needed to prioritize password resets, and welcome emails over other marketing emails. (By default, SES allows a maximum of 15-minute future send window without any dynamic queue reordering.)
  • A searchable log of all emails sent. You want to be able to log in to a panel and view all the emails that are currently outgoing or those your system sent in the past.
  • View email engagement metrics. You want to view all the open-rates/ click-rates, etc. on the emails you send. SES has come up with their deliverability dashboard which offers this but it has a higher pricing per email for this. Also, it is difficult to segregate and view these metrics based on your audience cohorts.
  • Remove hard-bounced and complaint emails from your contacts list. When SES reports that a particular email address returned a hard-bounce or that the end user hit the “mark as spam” button on your email - you are required to add that email to your do-not-send list.
  • Spam domain filtering. Make sure you do not send emails to known spam domains.
  • SES allows you to send say 14 emails per second. To fully utilize this, you need to write code that sends concurrent requests to SES - while never exceeding the 14 requests per second threshold for your account.

We faced these issues and have built systems to handle all the above aspects. We thought there might be other companies, looking for an off-the-shelf solution with all the above-mentioned points that they could simply plug into. So we decided to build Pendable - YAESS on top of SES.

Pendable acts as a wrapper service around Amazon SES, allowing you to focus on building your app while leaving the email related pains to us.

Instead of calling the SES API, you call Pendable’s email API, and we send your email to your SES account through our pipelines - adding all the necessary features that you need along the way.

So let’s dive into how Pendable handles each of the above points.

Monitoring your Bounce and Complaint rate and actively throttling email requests

Pendable utilizes Cloudwatch alarms to get notified of spikes in your bounce and complaint rates. When Pendable detects a spike in either of those rates, it starts actively throttling your emails to SES. This provides your SES account time to heal. Also, during this healing period, we send emails to your verified contacts only, so that your account heals faster.

Scheduling emails in the future and dynamically ordering emails

Pendable creates internal priority queues for each of our customer accounts. When we receive a new email request, we slot it in the account priority queue. We use the same priority queues to store your future emails and assign them a future score. When the future time comes, those emails are then merged with the execution queue and are prioritized based on each email’s priority. So you can push emails into our API and reprioritize your existing emails in the queue on-the-fly.

A searchable log of all emails sent

Pendable logs and stores all the emails you send. This helps you debug and troubleshoot email issues faster. Pendable also stores all the important data points about each email - like when did SES receive the request, when SES actually sent the email, etc. You can deep dive into each email’s log and view all actions that took place on that email. Your account and support teams can easily view, debug, and resend emails without bothering you.

Timeline view of email interaction

You can also look at the timeline view of a member and see how they have interacted with all your emails. This fine-grained view helps you identify if you are sending too many or too few emails and what times are best suited for sending emails to a member based on their previous interactions.

Email engagement metrics

Pendable hooks into SES configuration sets to get notified of all email-related events like deliveries, opens, clicks, etc. We surface all these metrics in our dashboard for you to slice and dice based on your customer cohorts. You can see how effective your email communication is to each audience cohort and fine-tune it accordingly.

Removing hard-bounced and complaint emails

When SES reports that a particular email address returned a hard-bounce or that the end user hit the “mark as spam” button on your email - you are required to add that email to your do-not-send list. Pendable handles this for you by maintaining your suppression list and automatically adding hard-bounces and complaints to your suppression list.

Spam domain filtering

Pendable maintains a list of known spam domains. We keep our list updated as newer spam domains are identified. When you send an email to a known spam domain, Pendable blocks that email from being sent to SES - thus saving your account from burning your reputation.

Maximizing email throughput

Pendable makes use of a command pool to ensure you are sending the maximum allowed emails per second to SES (let’s say 14 emails per second based on your account threshold). Our system picks up emails from the Pendable internal execution queue for your account and processes the maximum allowed emails per second to SES based on your SES send rate.

There are many companies today doing this but we wanted to solve this problem our way - providing maximum flexibility to our users without asking them to limit their contact in any way.

So in a nutshell, Pendable is everything we thought we needed to make SES an all-star solution for our and potentially your email needs.

We are excited to share Pendable with you. Do give us a try and send us your feedback!