Top 3 SMTP Plugins for WordPress Compared (and How to Fix Emails Not Sending)

Illustration by Camille Portales 3 colored eagles flying in blue sky

Welcome to our ultimate guide on how to send emails in WordPress. In this article, we’ll discuss what emails WordPress sends, how WordPress sends those emails, and why you should change the default WordPress setup to ensure your emails are actually delivered.

Table of contents:

Here’s a quick table of contents to help you navigate this lengthy tutorial:

Which emails does WordPress actually send?

Emails sent by WordPress are not the same as email newsletters or email marketing.

In fact, WordPress sends various transactional emails to your registered users. These emails are critical in nature, and any deliverability issues can lock you (or your team) out of your site.

Examples include, but not limited to:

  • Password reset emails
  • Comment notification emails
  • Site, plugins and theme update notification emails
  • New user welcome email and notification email (sent to admin)

In the majority of cases, a typical WordPress website sends a couple of emails per day or week, at most. The number of emails sent by WordPress mostly depends on your visitor engagement and the nature of your website. For instance, membership websites typically send various types of notifications emails such as product updates, membership information, blog posts and comment notifications.

Tip: To track and log which emails your website sends, we recommend using the plugin WP Mail Logging. It will give you an idea of how many emails your website sends.

How does WordPress send emails?

Let’s take a look at the journey of how a transactional email is sent in WordPress. For this example, we’ll reset the password of our WordPress user account.

  1. You start by requesting a WordPress password reset on the login page
  2. WordPress prepares the email and fires it using the default email sending method, which is PHP Mail.
  3. The PHP Mail function then sends the email to your host.
  4. Your host receives it and sends it with the Mail Transfer Agent (MTA).
  5. The email now finds its way across the internet to the recipient’s email provider (Gmail, Outlook, etc.)
  6. The email provider then checks the email for spam and places it in the recipient’s inbox
  7. Note that you have no proof it was delivered to the inbox.

Alternatively, you can configure WordPress to send emails with another method, such as the Send Mail Transfer Protocol (SMTP). SMTP enables you to send emails using your WordPress host or a third-party email delivery service such as SendGrid, Amazon SES and more, as we will explore below.

WooCommerce sends a considerable number of critical emails

WooCommerce introduces a series of order-related transactional emails, which are triggered at various stages of the customer journey. Examples include:

  • New order
  • Order confirmed, processing, completed
  • Order cancelled and refunded
  • New user and password reset emails.

WooCommerce’s emails are mission-critical and certainly call for taking the necessary measures we describe below to ensure no emails are ever lost.

WordPress and WooCommerce by default uses your web host to send all these transaction emails. And oftentimes, that’s not a good thing. Let’s understand why.

Why is your WordPress web host bad at sending emails?

Hosts already send emails for free, so why can’t we rely on them? Indeed, hosts are required to send emails for the websites they host, but are quickly burdened by sites that send a lot of emails, such as those with WooCommerce installed.

Hosts are not experts at sending emails for the following reasons:

1. Web hosts limit the number of emails you can send

Web hosts typically limit the number of emails that can be sent to roughly 100 emails per hour for each shared hosting account to prevent abuse by spammers.

Before there were such limits, spammers would open website accounts just to send thousands of spammy emails. At one point, a majority of the world’s spam came from website hosting companies.

If you exceed the limit set by your host, you’re likely to get a resource overuse warning, or maybe even face temporary account suspension. Check out the email sending limits of various WordPress shared hosting providers.

2. Sending spam may blacklist the web host’s IP

Apart from sending too many emails, when a shared hosting server is used to send spam emails from a mischievous customer, the impact is considerably worse. ISPs can blacklist the web host’s IP address, and any and every email sent through that server either land in spam or are undelivered.

This means that all the emails from your WordPress site (including critical ones like password reset and WooCommerce transactional emails) indefinitely land in spam or are undelivered. In most cases, web hosts aren’t experts at email deliverability, and rarely have the in-house capability to quickly resolve such issues.

To make matters worse, it only takes one defaulter to blacklist an IP address—so things are never really under your control!

3. Email delivery issue detection and prevention is difficult

Another significant problem with email deliverability is issue detection. When you use a shared web host, you won’t know that emails aren’t being delivered until a team member, visitor or customer informs you. Perhaps you might discover it by chance, like when you try to reset your own WordPress password.

To solve this, you can use a third-party email deliverability monitoring service, to proactively monitor for issues.

On the bright side, professional email delivery partners (such as SendGrid and Amazon SES) have industry-leading spam prevention countermeasures. It’s almost impossible to send spam via such partners.

For these reasons, many reputed WordPress hosts such as Dreamhost and Kinsta actually recommend not sending WordPress emails via their servers.

Long story short – it’s important to invest in an email delivery partner for sending WordPress emails. Even more so, when you’re running an online business such as a membership site or an online store.

How to send emails in WordPress using SendGrid and WP Mail SMTP for free

One of the most popular ways to send your WordPress transactional emails is to use the combination of the WP Mail SMTP plugin with SendGrid. This takes about 30 minutes to set up.

SendGrid has a lifetime free plan that lets you send 100 emails per day. Don’t know how many emails you send? Set up this plugin to log your website’s emails.

1. Sign up for SendGrid email delivery

To start things off, signup for a free SendGrid account under Email API.

screenshot of sendgrid free plans
SendGrid free plan (August 2019)

Step 1: Login to your SendGrid dashboard and navigate to Settings > API Keys and click on Create API Key.

Configuring SendGrid API key
Creating a new SendGrid API key

Step 2: Give a name to the API key. I’ve picked the plugin name where I’m going to use the API key. Under permissions select Full Access and click on Create and View.

Configuring SendGrid API key
API key privileges

Step 3: SendGrid will now show you the API key for the first and the last time. For security purposes, SendGrid will never display the API key again, so it is recommended you first save it in your notes such as Google Keep, before proceeding to the next step.

screenshot of sample SendGrid API Key
Sample SendGrid API Key

Optional Step: To further improve email deliverability, it is recommended that you authenticate your domain with SendGrid. This process involves adding CNAME records in your DNS. The DNS settings can be found either in your hosting provider, domain registrar, or CloudFlare (if you’ve configured it previously).

SendGrid domain authentication and link branding.
SendGrid domain authentication and link branding

You can also enable link branding such that the “from address” in emails from your WordPress site only have your domain name in it, and does not contain SendGrid. Following are two side-by-side comparisons of emails sent via SendGrid with domain authentication and link branding enabled and disabled.

SendGrid domain authentication disabled and enabled examples.
Example of emails sent with and without link branding in SendGrid

2. Set up email settings in WP Mail SMTP

Now that the SendGrid API key ready, it’s time to configure the WP Mail SMTP plugin.

Step 1: Install and activate the WP Mail SMTP plugin and navigate to the plugin’s settings from WordPress Dashboard → Settings → WP Mail SMTP.

Under the Mail tab, enter the following information:

  1. From Email: This should be the email you’ve configured in SendGrid.
  2. From Name: An easily recognizable name.
  3. Mailer: Select SendGrid
  4. Return Path: When your emails don’t get delivered because of soft/hard bounces, those notifications are sent to the Return Path email address. Check the box to send the bounce notification emails to your “from” email address.
  5. Enter your SendGrid API key that you’ve copied in the previous step and click Save Settings.
screenshot of WP Mail SMTP Plugin settings
WP Mail SMTP Plugin settings

Step 2: Go to the Email Test tab and send a test email. If everything is configured properly, the following test email should land in your inbox.

WP Mail SMTP test email sent via SendGrid
WP Mail SMTP test email sent via SendGrid

In case the email lands in the spam folder, try enabling domain authentication and link branding in your SendGrid account, and/or trying a different email inbox. If the problem still persists, try contacting SendGrid support.

3. Email Delivery Reports

screenshot of SendGrid's email report dashboard
SendGrid’s email report dashboard

You can monitor the email delivery reports such as click/open rates, soft/hard bounces, spam reports etc. from the SendGrid dashboard. With SendGrid, you get additional stats such as email clients, devices and mailbox provider stats.

Comparison of top 3 WordPress SMTP plugins

We’ll now compare the following three SMTP plugins for WordPress, to help you decide the best option for your WordPress site:

  1. Easy WP SMTP
  2. WP SMTP Mail
  3. WP Offload SES Lite

While exploring these plugins, I found that each of them offers similar features. Both WP SMTP Mail and Easy WP SMTP are completely free plugins, whereas WP Offload SES is a freemium plugin, specifically designed for Amazon SES. It does not support any other email provider.

Let’s take a look at the plugin comparison criteria:

  1. The first set of criteria discuss the email sending parameters – “From name”, “From email”, and “Reply-to address.”
  2. The second set discusses email deliverability criteria – Availability of pre-configured email providers, email stats such as open and click rates and bounce address. I’ll also mention if the plugin allows you to retry sending failed email deliveries.
  3. Finally, the last set discusses (for lack of a better nomenclature) other criteria – such as debug logging, the ability to import and export plugin settings and email alerts.

1. Easy WP SMTP

SMTP illustration.

Released in 2013, this free plugin has over 400,000 active users, with an average rating of 4.1 out of 5 stars. It offers a simple settings page that can be configured in under five minutes for most people (excluding the time taken to set up a third party email delivery service!).

Let’s take a look at its features.

screenshot of Easy WP SMTP settings
Easy WP SMTP plugin settings

Email Sending Parameters: Easy WP SMTP supports all three email sending parameters, i.e. “from name”, “from email” and the “reply-to address”. You can also force the “from name” in all your outgoing emails. However, keep in mind that this would interfere with the emails sent by your contact form plugins.

Email Delivery Parameters: For email deliverability, Easy WP SMTP offers SMTP config settings. It does not come pre-configured with existing email delivery providers such as SendGrid or Amazon SES. You do not get a dedicated bounce address field, and cannot retry sending failed email deliveries.

For this guide, I’ve used SendGrid as my email delivery provider and configuring it with Easy WP SMTP was a breeze, thanks to this tutorial. You need to find a similar tutorial for your email delivery provider.

screenshot of Sending test email in Easy WP SMTP
Sending test email in Easy WP SMTP

Email Stats: While testing Easy WP SMTP, the test email went through like a breeze. Email stats such as the open and click rates are usually available from your email delivery provider. If you’re using a public email provider such as Gmail or Outlook, the email stats won’t be available to you.

Easy WP SMTP also supports debug logging and the ability to import and export settings. You might not think that the import/export feature could be that important, but trust me – if you have multiple sites to configure, this feature can save a lot of monotonous work and time! All in all, it’s a great plugin.

2) WP Mail SMTP

wp mail smtp plugin banner

Originally released in 2007, WP Mail SMTP got acquired by WP Forms in 2017. At the time, it was “the most popular SMTP for WordPress” and the legacy had continued. Fast forward in 2019, the plugin has over 1M active users, and a 4.4 out of 5-star rating. I’ve used this plugin earlier on in the tutorial.

screenshot of WP Mail SMTP settings
WP Mail SMTP plugin settings

Email Sending Parameters: WP Mail SMTP supports both “from name” and “from email address”. However, it does have a separate field for a “reply-to address”. This means that when users reply to your email, they will use the “from email address” by default unless they explicitly mention another email address.

Email Delivery: This is one of my favourite features of the plugin. It supports direct integrations for Gmail SMTP, Mailgun and SendGrid, apart from the standard SMTP configuration. This is the only plugin that has this feature. The plugin also supports a dedicated “return path” field to handle bounce messages. However, similar to Easy WP SMTP, this plugin cannot retry sending failed email deliveries.

Email Stats: While the plugin does not display email reports, you can always access them from your email delivery partner.

Unlike Easy WP SMTP, WP Mail SMTP does not have the debug logging and settings import/export feature. However, if I had to choose between the two, I’d rather pick WP Mail SMTP, thanks to its one-click integration with SendGrid!

Unfortunately this plugin, which is arguably install-and-forget, will bloat your menu:

screenshot of highlighted admin menu item for WP Mail SMTP.

Adam from WPCrafter has an 8-minute tutorial on how to set up this plugin using the SMTP of an email address created in cPanel. As you can see, it takes a bit of jump through hoops to set it up.

3) WP Offload SES Lite

WP Offload SES illustration

WP Offload SES is the go-to plugin for integrating Amazon SES in your WordPress site. Launched in 2019, this plugin has over 20,000+ active users and a 4.2 stars out of 5 rating. The authors, Delicious Brains, makes a few plugins that are quite appreciated in the WordPress developer community.

Interestingly, this plugin does not support any other email delivery partner other than Amazon SES. Why? Because Amazon is the cheapest solution that’s also reliable. The integration is also quite simple – simply copy-paste the API keys and you’re good to go.

Amazon SES is priced very competitively at $0.1 per 1000 emails sent, per month, with no additional charges. For instance, if you send a weekly newsletter to 10,000 subscribers, you’d be sending 4 x 10000 = 40,000 emails per month. Your AWS bill would be $4 per month! Use the AWS SES pricing calculator to know exactly how much you’re likely to spend on sending emails.

screenshot of WP Offload SES plugin settings
WP Offload SES plugin settings

Email Sending Parameters: WP Offload SES supports all three parameters – including “from name”, “from email” and “reply-to email”. Make sure that you’ve added the same “from email” and verified your domain in Amazon SES.

Email Delivery: Since the plugin is built specifically for Amazon SES, you can configure the AWS region from which your emails are sent. You can also set a dedicated “return path” for handling bounced emails.

The premium version of WP Offload SES is the only plugin that enables you retry sending failed email deliveries. You can configure the plugin do this automatically, or you could manually retry email sending failures.

Email Stats: The free version of the plugin enables you to capture open and click rates. However, you’d have to upgrade to view the reports. Note that you can view the same stats in your AWS SES dashboard.

The free version of WP Offload SES has a lot more features pertaining to Amazon SES, such as:

  • Stats on your email send rate in SES
  • Sending domain and email address verification requests to AWS directly from your WordPress dashboard; and
  • WordPress Multisite support.

The premium version of the plugin offers email click/open reports, ability to queue emails to handle SES sending limits, retry unsuccessful email deliveries and email support. Plans start at $59/year (usually $99/year) for a single site license, including one year of updates.

Their own 3-minute demo video shows how this plugin takes the options a bit further compared to the other plugins:

The free email quotas offered by popular email delivery providers

Sending WordPress emails via a third-party email delivery service does not necessarily have to be an upfront investment. There are plenty of email service providers such as SendGrid, Mailjet and Mailgun that have generous free plans. Here’s a quick rundown of the free quotas they offer:

  • SendGrid: 40,000 emails/mo for the first month and then 100 emails/day forever
  • Mailet: 6,000 emails/mo limited to 200 emails/day
  • Mailgun: 10,000 emails/mo with explicitly mentioned no daily sending limits

Unless you’re using WooCommerce with 20+ daily active orders, 100 emails/day should be more than sufficient. You can use the WP Mail Logging plugin to know how many emails your WordPress site actually sends.

When you outgrow the free quota, Amazon SES is a reliable, cost-effective email delivery alternative, priced at $0.1 per 1000 emails sent.

Signing your emails with SPF and DKIM

SPK and DKIM are email authentication protocols that prevents your email from ending up in spam. They do this by verifying that emails from yourdomain.com actually originate from yourdomain.com — and not a spoofed email address.

It is highly recommended that you configure SPF and DKIM for your domain for better email deliverability. You can do this by adding TXT or CNAME entries to your domain’s name server (DNS) records, as suggested by your email delivery provider.

For popular email delivery providers, following are their tutorials for configuring SPF and DKIM:

  • Mailjet: Works by adding TXT records, domain authentication is mandatory.
  • SendGrid: Works with CNAME (preferred), and TXT records. SPF/DKIM verification is mandatory.
  • Mailgun: Domain authentication is optional. Unverified domains are limited to 300 emails per day. Supports both CNAME and TXT records.

Once implemented, you can verify the SPF and DKIM keys and check the spammyness of your emails by using Mail-Tester.

Wrapping Up

Email delivery is tricky business. That’s why we have so many great companies working round-the-clock to provide us with robust tools, that ensure our emails reach our subscribers’ inbox. This is the primary reason for recommending a dedicated email delivery partner to send WordPress emails.

One of the features that Kim (MailPoet’s founder) felt was missing from the SMTP plugins, was email alerts. What happens when your SMTP server goes down and no emails are delivered? This is why WP Offload’s SES feature that enables you to “retry unsuccessful email deliveries” is so great. Can the other plugins detect this issue and revert to PHP Mail to send us an alert? I think that’d be a very useful feature. What do you think?

Also, what’s your preferred WordPress SMTP plugin? Let us know in the comments below!

Useful Links

  1. SMTP settings for SendGrid, Mailjet and Mailgun
  2. How to setup Amazon SES on WordPress using WP Offload SES Lite
  3. Why should you now use your web host to send WordPress emails: Dreamhost, Kinsta and MailPoet.