How do I fix WordPress not sending emails?

In this article, we explore using an SMTP (Simple Mail Transfer Protocol) to fix your WordPress based websiteโ€™s emails sending system and how to implement one for faster and reliable email delivery. We will use Brevo (formerly SendinBlue) as an example.

WordPress’s default mail function works only when you test it with your own accounts and dummy emails, and fails when you actually need it to email your newsletter or if someone uses your contact form. Totally unreliable.

WordPress’s Default Mail Function Sucks

WordPress, by default, uses the PHP mail() function to send emails. This sucks for email communication because your emails either end up in spam or not get delivered at all. This is especially true if you are on a shared hosting plan. Tracking email delivery is also challenging without third-party plugins.

How do I fix WordPress not sending emails?

SMTP is a protocol used for sending and receiving email messages. Its like a dedicated postman handling your mail instead of letting your website handle itself and your mail. This means Enhanced Deliverability, Authentication, Customization, tracking, and most importantly: RELIABILITY.

How to use SMTP for WordPress

Lets walk through an example for implementing SMTP for your wordpress website. We will use Brevo (formerly sendinblue) as beyond nothing .com also uses this and it works well for our needs. And the free plan sends up to 300 emails per day.

This setup can take 30 minutes to 1 hour depending on your comfort and server response times. Take your time though, no rush. We will divide this guide into two parts as there is some work to be done on your domain hosting service side and on the wordpress side. Lets start with the hosting side.

Create a mailing domain

  1. Log into your hosting service such as bluehost or dreamhost and find the section where you can create a subdomain.
  2. Create a subdomain called โ€˜mailerโ€™ or something keeping the parent domain that of your website. For example, the mailing domain for this website could be mailer.beyondnothing.com.
  3. Give that new subdomain some time to propagate.
  4. Find the DNS settings for your new domain from where you can add TXT records. Keep this window open as you will be coming back here later.
  5. Now go to your wordpress dashboard for the rest of the process

Configuring SMTP in WordPress

  1. Make sure you have the WP Mail SMTP plugin installed on your WordPress site. Depending on your WordPress installation, you might have this plugin by default. If not, simply download from the plugins section.
  2. Go to the WP Mail SMTP settings from the WordPress dashboardโ€™s sidebar.
  3. From the list of mailers under the general settings tab, select Brevo.
  4. Below you will see a field asking for an API Key. Click on the link provided to obtain your API key. The Brevo Website will open up.
  5. On Brevoโ€™s website, go through the whole account creation process.
  6. After making an account, go to the โ€œSenders and IPโ€ setting from the menu > Domains > Add new domain
  7. Enter the complete name of that mailing subdomain you created earlier with your hosting service during step 2.
  8. It will then ask you to verify your domain and show you some TXT records. You will have to go into the DNS settings of your new domain on the hosting webpage.
  9. Enter both those TXT records in your DNS settings and hit save. Let it propagate. Meanwhile go back to Brevo and hit authenticate.
  10. Now on Brevo go to โ€œSMTP & APIโ€ from the main menu. Generate an SMTP key or a โ€˜master passwordโ€™. Then on the API section, generate a new API key. COPY IT!
  11. Now go back to to your WordPress dashboard in those SMTP settings where you left off at step 9.
  12. Paste that copied API key into that field.
  13. The next field asks for the โ€˜Sending Domainโ€™. Enter that mailer subdomain you created on your hosting service earlier in step 2.
  14. Hit โ€˜save settingsโ€™.
  15. Send yourself test emails. Test your contact form. Test your newsletter. Send an email from your webmail to your personal one. Or from your personal to your webmail. Try all combinations. If you did everything right, you should be receiving every single email.

If you dont get results immediately, give your server and the SMTP servers some time to communicate with each other and propagate their information. You did after all create a whole new subdomain and add some TXT records to go with it. Give it an hour or so. Assuming you did everything correctly.

You can play around with the other settings on Brevo or the WP SMTP plugin and see how much you can customize your mailing style and preferences. But for now, your website should now be using SMTP, and your emailing system should not fail you.

Remember that is free version if Brevo has a 300 email per day limit. This is not bad for a small website. However, you may have to upgrade to a paid plan to meet your growing emailing needs.