I’ve been a user of Mandrill for a while, it’s a great service for sending transactional email. I only use it for a couple of personal projects (mainly because Gmail started getting funny when I was sending through them). I just checked my account and I average one email per day. It’s slightly higher than that as I send at least one a day, sometimes more. If I send fifty emails in a month it’s been a busy one.
I took advantage of their very generous free tier that offered 12,000 free emails a month (which got removed last July). I barely made a dent. So their recent announcement that you will soon require a paid MailChimp account to use Mandrill, and to pay for all email sent via Mandrill, meant my days of use were numbered (I wasn’t the only one, it wasn’t a popular decision).
There are plenty of alternatives, so I thought I would check them out and see which best suited me.
Requirements
My requirements were pretty simple:
- A free tier (ideally) allowing for 100 or so emails per month
- A simple web API, ideally with libraries for common languages like Python and PHP
- Ability to host templates preferred (so I can just load the data I need rather than the entire email) and a simple templating language
- No requirement to set up a domain (I could do it, but these emails are only sent to me, so spoofing should be fine)
- Good deliverability (I still need my emails to get through)
- Good documentation
The Contenders
During the outcry following the Mandrill announcement, a number of options were put forward by the community:
- Mailgun
- SendGrid
- Mailjet
- SparkPost
- SendinBlue
- Maildocker
- SocketLabs
- Pepipost
- Postmark
- Elastic Email
- Sendwithus
- Amazon SES (discounted as no free tier* and reports of poor deliverability)
* Yes, strictly speaking you can get it free for 12 months or if you have an EC2 instance
Mailgun
Mailgun looks to be owned by Rackspace, so big company backing, and has some big names on the home page.
The sign-up process was simple enough. I had to activate my account from an email and then I had to send myself a text message. I wasn’t particularly keen on the latter, but it was straightforward enough.
They don’t offer the ability to create or store templates.
You appear to be required to add and verify a sending domain.
Documentation looks reasonable.
They have some libraries, hosted on Github, but the Python instructions simply use the Requests (http) library.
They offer 10,000 free emails a month.
SendGrid
Established in 2009 (it says) and appears focused on transactional email and deliverability, but they now seem to be moving into bulk emails as well. Some names I’d heard of on the home page.
A simple sign-up form and email validation was followed by a huge form wanting a ton of data like address, industry, etc. The account then had to be ‘provisioned’ so you’re not able to send anything out.
They want you to not only verify that you are in control of the domain, but that it has a live web page, let them know the sorts of email you’re going to be sending and a bunch of other stuff.
They do offer templates, although they’re a little clunky (there are some required merge fields for subject and body and they use :field_name as the merge format, which seems dangerous).
There’s a bunch of official libraries for most languages, all hosted on GitHub.
The interface felt slow and a the lack of any colour made it hard to navigate (there was nothing to draw my eye to what I should be looking at).
They offer 12,000 free emails a month (they’re also offering a discount for ex-Mandrill users who sign up before 30th April).
Mailjet
Looks to have been around since 2010 and is based in Paris. There were a couple of names I’d heard of on the home page, but nothing compared to some of the others.
I kept seeing these loading circles floating over things like the registration form. Even the dashboard. Frankly if it takes you several seconds to load a form, you’re doing something wrong. It just seemed odd.
API documentation was separate from the regular stuff. They did have a dedicated article for those leaving Mandrill though. No ability to search the (regular) docs as far as I could see, which made finding anything frustrating. API docs were searchable and (thankfully) contained the answers I was looking for.
They don’t appear to require domain validation, but do recommend it.
They have a bunch of libraries for common languages, hosted on Github.
Uses the Jinja2/Twig template language, which I’m familiar with.
Felt like overkill for a few simple transactional emails (it’s capable of bulk campaigns too).
They offer 6,000 free emails a month (200 per day).
SparkPost
Owned by Message Systems (I’d never heard of them but I recognise some of their products). Definitely some names I recognise on the home page. They claim to have the best deliverability of any transactional service.
Sign-up was nice and simple (email address and password and off you go). Nice onboarding video linked from their welcome email.
You do need to add and verify a domain before you can start sending live emails (via one of four methods).
They have the option for templates and appear to use some sort of Handlebars/Jinja/Liquid language for merges (they’re not explicit about which).
Their API docs are off in a separate developer hub, which didn’t seem entirely joined up with the main app. It has links to various libraries in a range of languages, all hosted on Github.
They have a dedicated post on migrating from Mandrill.
They offer 100,000 free emails a month (you read that right).
SendinBlue
It’s been around since 2012 and offers more than just a transactional email service, with both bulk campaigns and SMS among other features. They position themselves as a cheaper alternative to MailChimp. A few companies I recognise on the home page.
Sign-up was simple, a few fields and an email confirmation. I also got a welcome email with a link to a getting started video, but a few images were missing from the email, which isn’t a great first impression.
Looks like you need to verify a domain before you’re able to use it.
Took me a while to figure out I needed to switch to the transactional system, which appears to be completely separate to the rest. Creating templates wasn’t obvious but is possible. The templating language wasn’t anything I recognised but was simple enough.
You also have to activate the SMTP API after you create the account (the message actually said my SMTP account had not yet been validated). I couldn’t complete my profile (which it suggested I needed to do before I could get access) as the submit button didn’t do anything and I couldn’t see how to activate it.
The wording around the interface suggests English isn’t the team’s first language. Not an issue, but could lead to complications. It did lead to confusion in the docs, which weren’t the clearest.
Always slightly concerning when a site has an out-of-date copyright notice, even more so when it changes on different pages.
They offer 9,000 free emails a month, but it suggests they’ll include a SendinBlue logo (though that may be only for bulk emails).
Maildocker
Created by eCentry, who have been around since 1999 and are based in Brazil. A limited number of companies mentioned on the home page, but I recognised them all.
A simple form and email verification to sign up, but it wanted a bunch of address details during the second step. Holds your hand a little when you sign up, which few others do. The account also got stuck in ‘provisioning’ and a couple of days later was still there (so this could be abandonware).
You need to set up DNS for your sending domain before you can use it.
Their getting started guide is pretty straightforward. Documentation in general looked good.
The wording in various places suggests English isn’t the team’s first language. Not an issue, but some of the help text wasn’t too clear as a result.
They offer templates and use Jinja2 for merges.
Official libraries on Github.
Always slightly concerning when a site has an out-of-date copyright notice.
Strangely, they make you pick a subdomain when you sign up and you have to use it to login. The domain they give you is whatever.maildocker.io but when you login it asks for whatever.ecentry.io so is inconsistent.
They offer 10,000 free emails a month.
SocketLabs
A spin-off from Quiksoft (which has a website from the 90s) they claim 15 years experience (but doesn’t say when they were actually founded). I recognised a few names on their home page.
I didn’t bother signing up. It looked clunky and not especially slick. Another service where transactional email is a bolt-on.
Very few libraries and some limited examples of API integration on GitHub.
They offer 2,000 free emails a month, with 2,000 API calls (who even limits API calls these days?).
Pepipost
Only been around since 2015. Based in Mumbai. No companies I recognised on their home page.
You need to verify your domain before you can use it.
Always slightly concerning when a site has an out-of-date copyright notice.
Documentation left something to be desired. No libraries, simply using curl/requests for http calls.
I didn’t bother signing up. It looked a little clunky and unfinished.
They offer 25,000 free emails a month, plus free unlimited emails for three months if you sign up before 30th April. Pricing is slightly odd as they only charge for emails that aren’t opened.
Postmark
Created by Wildbit, which also built Beanstalk and DeployBot. Some names I recognise on the home page. Designed for transactional email only.
Easy enough sign-up process, no onerous data requirements.
It requires you to verify the email address you wish to send from, but doesn’t require you authenticate the domain (though it is recommended).
You can create templates (and they have a few examples to start) and they use Mustachio for their dynamic stuff, something they seem to have forked from Mustache. It lacks any form of conditionals, which I found a bit limiting.
They have libraries (on GitHub) for a few languages, but not Python.
They offer 25,000 free emails, that’s it, not per month. I did, however, get an (automated) email a day or two after signing up that offered me 10,000 additional credits if I got sending within 72 hours.
Elastic Email
Created by Geographical Media (apparently in 2010), a Canadian web design company. No one I recognised on the home page. They claim to be saving trees (and money) by having ultra-efficient sending servers.
No libraries or wrappers, some examples in a few languages that all use raw http calls.
The site is a barely modified Bootstrap template, which didn’t instil confidence. I didn’t sign up.
They offer 25,000 free emails a month.
Sendwithus
Apparently founded in 2013 and describes itself as ‘optimzely for email.’ They don’t seem to actually send themselves, but rather work with a bunch of the others on this list to do the actual dispatch. They’re main aim is template hosting.
Simple sign-up, not too many questions or too much data required. Followed by an activation email.
Templating is what they do, so obviously they have this. They use the Jinja2 language.
They have a bunch of libraries in common languages, all on Github.
Though they don’t send as such, the ability to create and host templates adds to other services (like Mailgun, which doesn’t) and because you send using their API it means you can switch providers without changing code. On the other hand, it adds another service to the loop.
They offer a free tier to send to 1,000 monthly recipients (email addresses).
My Thoughts
Well, I can see why Mandrill was so popular. It was simple to use, had great documentation, didn’t require you to verify a domain, didn’t ask for huge amounts of personal data and generally just let you get on with things. I’d take it over any of this lot again if it weren’t for the new price.
That being said, all of the options above come with a generous free tier. So they have that going for them. Even though Postmark only offers a total of 25,000 free sends, should my send rate increase to 100 emails a month I would still get about 20 years of use.
SocketLabs, Peripost and Elastic Email just didn’t look professional. Appearance is important, if you can’t get that right what does it say about your service?
I didn’t like SendGrid’s desire to know everything and their templates were odd. I had to email support to delete my account. (update: I’ve subsequently found their templates don’t do conditionals and their domain verification process, while not required, is arduous as it requires custom CNAMEs. So a definite no.)
Mailjet’s interface drove me slightly nuts. The support request to delete my account was answered ultra fast though.
SendinBlue’s offering felt like a rushed bolt-on rather than a core part of the system. They did let me delete my account without contacting support (but not before subscribing me to their newsletter, naughty).
After a couple of days with Maildocker my account was still being provisioned, with no idea when it would come out or how I accomplished that. I decided to delete my account. I had to contact support but at least they had something in their FAQ about it.
That left me with SparkPost, Postmark and a combination of Sendwithus and Mailgun.
Writing Some Code
All of their PHP libraries required Composer to include them, which I don’t use and didn’t particularly wish to install for this sole purpose. I could have used SMTP for SparkPost and Postmark instead. Both SparkPost and Sendwithus had Python libraries, while Postmark leaves Python to be covered by community libraries, neither of which appeared to support sending templates.
I was only interested in sending, so for my PHP integration I turned to the Httpful library.
I found that Postmark wouldn’t let me set a subject line dynamically if I used the template send option (in fact none of them would), but I could merge into it (which all of them allowed), so I was able to achieve the same thing (i.e. set the subject at send time, which is useful for re-using templates).
SparkPost was very similar. Took me a while to get the syntax of the call right (nested recipients mainly) as their documentation and examples were a bit confusing. I also had to use a merge in the subject line when using a template instead of just being able to specify it dynamically.
I had to hook Sendwithus up to Mailgun first, which exposed an oddity in that Mailgun creates both a public and private API key. I couldn’t find anywhere that explained the differences. I deduced that the public one is for code where it will be exposed (e.g. JavaScript), but nothing explicitly says that. I went with the private one (nothing in Sendwithus docs about this either) and it worked.
After that is was fairly simple and sending this way even let me spoof email addresses without issue (I assumed I’d have to use the domain I had associated with my SPF record).
And the Winner Is…
For my usage, you’d argue for Postmark. They have templates, but they don’t offer much more than straightforward merges and that was an issue for me. They did require the least amount of work to set up sending addresses though. Their libraries failed to deliver but their documentation was fairly good.
Their free tier is the least generous though (one off 25k) and are they’re very expensive thereafter ($1.50 per thousand, compared to $0.50 at Mailgun and $0.20 at SparkPost). To give you an idea, if you wanted to send 100,000 a month it would cost $24.99 at SparkPost (assuming you didn’t stick with the free tier), $45 a month at Mailgun (plus $399 a month for Sendwithus if they were all different recipients) and $150 a month at Postmark.
For my use that’s probably not an issue, as I send so few emails, but for larger senders it’s worth bearing in mind.
Mailgun’s a no-go for me, due to the lack of hosted templates. Their requirement not just for SPF but DKIM was a pain too. I liked Sendwithus. As you’d expect, their template stuff is very good and the ability to send via multiple providers is handy. For me, their monthly recipient limit for the free account isn’t a problem. The price does ramp up very fast after that though. I didn’t feel I wanted another service in the chain though.
Neither of their libraries did it for me, but it was fairly easy to re-use the same code I had worked up for the other two and their documentation was sufficient.
SparkPost’s documentation, while comprehensive, was poorly laid out and difficult to understand. I got there in the end though.
Their in-built templates, which had conditional options, did the job for me and they were my final choice.