Beginner's Guide for WordPress / Start your WordPress Blog in minutes

How to Fix WordPress Not Sending Email Issue

One of the most commonly asked questions on WPBeginner is how to fix WordPress not sending email problem.

Many of our beginner-level users ask us why their contact form plugin is not sending emails, or why they are not seeing any WordPress notifications.

In this article, we will show you how to fix the WordPress not sending email issue, so your website can send emails more reliably and bypass the spam folder.

How to fix the WordPress not sending email issue

Why You’re Not Getting Emails from Your WordPress Site

The most common reason for emails going missing is that your WordPress hosting server is not properly configured to use the PHP mail() function.

Even if your hosting is configured to use it, many email service providers, like Gmail and others, use a variety of tools to reduce email spam. These tools try to detect that an email is really coming from the location that it claims to be from.

Emails sent by WordPress websites often fail this test.

This means that when an email is sent out from your WordPress site (contact form plugin, admin notification, etc), it may not even make it into the recipient’s spam folder, let alone the inbox.

This is why we recommend not using WordPress to send your email newsletter.

This is also the reason why we recommend everyone to use SMTP for sending emails in WordPress.

What is SMTP?

SMTP (Simple Mail Transfer Protocol) is the industry standard for sending emails.

Unlike the PHP mail() function, SMTP uses proper authentication, which leads to high email deliverability.

WordPress has a WP Mail SMTP plugin that configures your WordPress site to send emails using SMTP instead of the PHP mail() function.

You can use it to connect with any popular SMTP services like SendLayer, Sendinblue, Gmail (G Suite), Office365, Amazon SES, etc.

With that said, let’s take a look at how to fix the WordPress not sending email issue.

Video Tutorial

Subscribe to WPBeginner

If you’d prefer written instructions, just keep reading.

Installing the WP Mail SMTP Plugin

Whatever SMTP service you choose, you’ll need to have the WP Mail SMTP plugin installed on your site. This lets you switch WordPress from using the built-in PHP mail() function to using your SMTP service.

First, install and activate the WP Mail SMTP plugin. If you’re not sure how, see our step by step guide on how to install a WordPress plugin.

Next, click on WP Mail SMTP in your WordPress dashboard to configure the plugin settings.

The WP Mail SMTP settings page in your WordPress dashboard

You will need to start by entering the name and business email address you want your site’s emails to come from. Make sure you use the same email address here that you’ll be using for your SMTP mailing service.

Entering the name and email address that you want your WordPress emails to come from

You can choose to force emails to use this name and email address, even if other plugins, like WPForms, have different settings. WP Mail SMTP will override the other plugins’ settings.

After that, you need to choose an SMTP mailing service for your site.

For this tutorial, we’re going to set up SMTP using SendLayer. If you’d prefer to use Gmail or Office365, then we’ve got instructions on those later in this article as well.

Select SendLayer as your mailer in WP Mail SMTP

To finish setting up WP Mail SMTP, you’ll need to create an account with SendLayer. We’ll move on to that next, and then come back to finalizing the setup on WP Mail SMTP.

Sending WordPress Emails using SendLayer

SendLayer is a reliable email service provider. They let you send a large number of emails with high deliverability.

You can use SendLayer to send up to 200 emails for free, which is more than enough for most small websites to get started.

These could be emails from your contact form, new user account details, password recovery emails, or any other emails sent through your WordPress site.

First, you’ll need to go to the SendLayer website to create an account. On the Pricing page, click on the ‘Take SendLayer for a free trial (send up to 200 emails)’ link to set up your account.

Click SendLayer free trial link

Once you’ve created an account, you’ll see your SendLayer dashboard, which looks something like this:

The SendLayer dashboard

Now that you have a SendLayer account, let’s set up your email provider with WordPress.

Connecting Your WordPress Website with SendLayer

Before you can send emails with SendLayer, you need to authorize your domain.

This proves to email servers that you are the confirmed owner of your sending domain and that your emails are sent from a legitimate source.

To authorize your domain, click the orange ‘Add Domain’ button from the SendLayer dashboard.

Click the Add Domain button in SendLayer

On the next page, simply type your domain name into the field provided.

Then, click on the ‘Add Domain’ button.

Add your domain in SendLayer

Note: With other mailing services like Sendinblue, you need to set up a subdomain for your website first. But, SendLayer will automatically add the subdomain to the sender domain’s DNS records. So, you don’t need to add an additional subdomain when registering the domain.

Once you’ve added your domain, SendLayer will generate 5 DNS records, which are unique to your domain.

These lines of code let SendLayer authorize your domain name.

SendLayer DNS records table

You’ll need to add these DNS records your WordPress site. This may seem complicated, but all you need to do is copy and paste them into the right place.

First, open up a new browser tab and log into your WordPress hosting account. For the sake of this tutorial, we’ll demonstrate on our example hosting account on Bluehost.

Next, you need to find your domain and open up the DNS records.

In Bluehost, you do this by going to Domains » My Domains. Then, click the ‘Manage’ button next to your domain.

Click on the Manage button next to your domain in Bluehost

Note: If you’re using other hosting companies or if your DNS is managed at domain registrar like Domain.com, Network Solutions, or GoDaddy, then follow their respective instructions.

On the next page, click the ‘DNS’ tab. Here, you’ll need to add the 4 CNAME records and 1 TXT record that were provided by SendLayer.

First, scroll down to find the CNAME section of your DNS records. It will look something like this:

Add CNAME records from SendLayer in Bluehost

Then, click ‘Add Record’.

Complete the first record as follows:
Host Record: sl
Points To (Value): Copy this from SendLayer.
TTL: 4 Hours (min)

Tips: Host Record might be called Host or Name by your web host. When adding the Host Record, be sure to only add the subdomain (sl), since Bluehost will add your domain automatically. You may need to add the Record Type, which would be CNAME.

Once you have added the first record, click on the ‘Save’ button to store your changes.

Next, continue adding the 3 other CNAME records by repeating the steps above.

After that, scroll down again to find the TXT section of your DNS records. Here, you need to add the TXT record from SendLayer.

Add the TXT record from SendLayer

Click the ‘Add Record’ button and complete it as follows:

Host Record: sl
TXT Value: Copy this from SendLayer.
TTL: 4 Hours (min)

Once you’re done, go ahead and save that record too.

Note: TXT Value might also be called TXT data: it’s the long piece of code in the last row of the SendLayer details. TTL could be 24 hours or 86400 seconds (both are equivalent to 1 day). If you’re using GoDaddy, set it to 1 hour.

After you’ve added your records, go back to SendLayer and check the box next to ‘I have added these DNS records and am ready to proceed.’ Then, hit the ‘Verify DNS Records’ button.

Verify DNS records SendLayer

It may take 24-48 hours before SendLayer is able to verify your records, but it’s often much quicker.

If nothing happens when you click that button, the records can’t yet be verified. You can check again later to see if they’ve been verified by going to Settings » DNS Records & Settings from your SendLayer dashboard.

SendLayer DNS TXT records once they've been verified

Here, you’ll find a list of all of your DNS records in one place. Once your domain has been successfully authorized, you’ll see green checkmarks next to each DNS record in the ‘Status’ column.

You can keep going with this tutorial while you wait for the authorization to take place.

Finishing Setting Up WP Mail SMTP to Use SendLayer

Now, go back to your WP Mail SMTP settings in your WordPress dashboard. You should have already entered the From Email and From Name, but if not, you can do that now.

Next, click on ‘SendLayer’ for your mailer.

Select SendLayer as your mailer in WP Mail SMTP

After that, you’ll need go to your SendLayer account to find your API key.

From the SendLayer dashboard, simply go to the Settings » API Keys page. Here, you’ll see a default API key that was generated when you authorized your domain in SendLayer.

Finding SendLayer API keys

You can copy the API key from this page by clicking on the copy icon.

Click to copy the API key in SendLayer

With that done, you can head back to your WP Mail SMTP settings and paste the API key into the field provided:

Paste the SendLayer API key into WP Mail SMTP

Congratulations. You’ve now set everything up. The final step is to send a test email to make sure everything is working.

Go to the ‘Email Test’ tab of WP Mail SMTP and enter an email address to send an email to. This will default to the site’s admin email. Click ‘Send Email’.

You should see the message ‘Test HTML email was sent successfully!’ Check your inbox to see whether it’s arrived. It’ll look like this:

The test email from WP Mail SMTP

Note: If your SendLayer account isn’t yet activated, you’ll get the message: [permission_denied]: Unable to send email. Your SMTP account is not yet activated.

Alternative Ways to Fixing WordPress Email Issue

As you can see from the WP Mail SMTP plugin’s list of mailer options, you don’t have to use SendLayer. While it’s our top free recommendation, there are other options that you can use, including Office 365, Gmail / G Suite, Amazon SES, etc.

Using Gmail or G Suite with WP Mail SMTP to Fix WordPress Emails

If you have a Gmail or G Suite account, then you can use that to send your emails. You won’t need to enter your email login details in WordPress when you’re using the WP Mail SMTP plugin.

To use Gmail or G Suite, set up WP Mail SMTP as shown above, and then click the ‘Google’ option for your mailer.

You will need to check the ‘Return Path’ box.

After that, you will be asked to enter a ‘Client ID’ and ‘Client Secret’. To get these details, you’ll need to create a web application in your Google account. Don’t worry if that sounds a bit daunting. You can find full instructions in this article on using Gmail to send your WordPress emails.

Note: You can use this process with a regular Gmail account, but your email deliverability will be much better if you are using G Suite. See our guide on how to set up a professional email address with Gmail and G Suite.

There are a couple of key drawbacks to using Gmail or G Suite, however.

One is that you may need to contact your web host to get them to install the right certificate to get it working.

Another is that if you change the email address in the future, you’ll need to go through the entire process again. This will include creating a new web application.

Using Office 365 / Outlook with WP Mail SMTP to Fix WordPress Emails

If you use Microsoft Office 365 or Outlook for your regular email account, then you can also use that to send out emails through WordPress. This isn’t a recommended option, though, because it’s less secure.

You’ll need to set up WP Mail SMTP as above, then click the ‘Other SMTP’ option. This will open up a form to complete. Fill it out using the following settings:

SMTP Host: smtp.office365.com
Encryption: TLS
SMTP Port: 587
Auto TLS: (leave switched on)
Authentication: (leave switched on)
SMTP Username: Your Office 365 account email address
SMTP Password: Your Office 365 account password

A key problem with this method is that it requires storing your password in plain text within WordPress. This isn’t secure, and your password will be visible to any other administrators on your account. You can use the instructions in the WP Mail SMTP app to record it in your wp-config.php file instead.

For more details, see the detailed guide on how to set up Outlook with WP Mail SMTP.

Using Amazon SES with WP Mail SMTP to Fix WordPress Emails

Amazon AWS platform has a Simple Email Service (SES) that you can use to fix the WordPress email issue.

The best part about Amazon is that it lets you send up to 62,000 emails every month for free. The downside is that the setup is a bit more challenging for beginners, which is why we don’t recommend it as our preferred option.

But as you can imagine, a lot of professionals and experts use Amazon SES for their WordPress email SMTP service, so we couldn’t write an article without mentioning it.

If you’re interested in setting up Amazon SES with WordPress, then see the full instructions on how to set up Amazon SES with WordPress.

Whatever mailer you decide to use, always remember to use the ‘Test Email’ tab to ensure that emails are being successfully sent.

You must make sure to check your inbox too, and confirm that you’ve received the test email.

We hope this article helped you learn how to fix WordPress not sending email issue. You may also want to see our list of the most common WordPress errors and how to fix them, or our picks of the best WooCommerce email customizer plugins.

If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.

Disclosure: Our content is reader-supported. This means if you click on some of our links, then we may earn a commission. See how WPBeginner is funded, why it matters, and how you can support us. Here's our editorial process.

The Ultimate WordPress Toolkit

Get FREE access to our toolkit - a collection of WordPress related products and resources that every professional should have!

Reader Interactions

150 CommentsLeave a Reply

  1. My problem is that wordpress won’t send emails to or from an address that is coming from my domain name. E.g. @domain.com. But it will send from any other email address type.

  2. i successfully setup my site, and it is working very well.
    thanks for this nice and working tutorial..
    i used gmail api first method..

    SORRY FOR MY BAD ENGLISH

  3. hello, please does anyone know how can stop WordPress from sending automatic emails to blog subscribers, i want to use MailChimp but it seems i have to first disable WordPress. thank you

  4. Thank you so much. You have tutorial helped me fix my email problem . this was one of the best tutorials I have ever seen. every step is very well explained.

  5. Hi, I have installed SMTP – I think right.. but I’m still not receiving emails from the contact form. I’m also not getting new order notifications. can someone please help me? :(

  6. I’ve completed all the steps using mailgun but when I try to send a test email to my other webmails in that same domain, they never get delivered. However it works pretty well with other emails such as gmail.
    Any idea about what might be causing this issue?

    • Hi Ron,

      Default WordPress notification emails are not stored in the database. However, if you are using a plugin which stores entries in the database then you may be able to see them.

      Admin

  7. Instead of the Success! message, I get an error like this:
    ——–
    Not Acceptable!

    An appropriate representation of the requested resource could not be found on this server. This error was generated by Mod_Security.
    ——-
    What is the problem?

    • I’m having the exact same problem. The answer appears to lie in complicated CSS maneuvers that I hate.

  8. So…this used to be my go to app. Found a similar help video from you guys a while back. Loved Mailgun – then they started changing their policy. Now, it only works for verified email addresses..unless…you put a credit card on file.

  9. I’ve been having problems with admin and users (and new users) not receiving automatic notifications.

    Will this also solve that issue?

    Thanks

  10. Hi,

    I’m confused in the step of opening the cPanel in the hosting account. What is the hosting account? Is it found in WordPress? Thanks

  11. I was having the exact same problem with e-mails not sending and these instructions were v useful. I have now fully resolved the issue – thank you very much

  12. Hello,

    Thank you for the topic. It helped me a lot and fixed the issue I was struggling with for last 3 days.

    Regards,
    Amol

  13. I started to use the video guide and the first step was to set up a mailgun account. I created a password and clicked the verification link in my email to complete the account. However they then wanted to text me a confirmation code to a cell phone as a second verification. I only own a landline not a cell phone and there was no workaround so it is impossible for me to use mailgun. I realize most people these days have cell phones but it seems stupid they would not allow signup via computer (or via a voice code over the phone).

  14. Thank you so much! I just had some changes regarding domain settings, and this pointed me in the right way.

  15. Hi, If i am using Zoho mail for example.com for email.

    Can i still use mail1.example.com and configure mx record?

    Will it work or stops my email account created on zoho mail for example.com

  16. My wordpress send emails, but, this emails Go to Spam folder… I need a soluction. I try using codes from functions.php but does not work. My solution was install Mail Bank plugin but, I dont want this plugin. I want a simple soluction.

  17. hello! I am having issues with my Contact page, we are not receiving new contact information in our CRM site. Can you please guide me to fix the issue?

  18. Hey

    Thanks for the great tutorial. I’m getting
    “Mailgun HTTP API Test Failure; status “Free accounts are for test purposes only. Please upgrade or add the address to authorized recipients in Account Settings.”
    Do you know why or how to resolve?
    (Added an “authorized user” to my acount)

    • I’m having the same problem. I also don’t understand how to get to the cPanel. What am I missing?

  19. Ah! When in doubt add this TXT Record. @ v=spf1 include:_spf.google.com ~all
    That is, this works for Namecheap (and most likely others) when Gmail is enabled. Enjoy!

  20. I am having the problem that the wp_mail() function is not showing up in our functions.php document. If I read the documentation correctly, that means Gmail SMTP plugin still won’t work because it uses that function still. Every time I have tried to add the wp_mail() function it has resulted in a fatal error that kills the website and I have to remote into our server to delete the code to get the page working again. Any ideas?

    • Hey Aaron,

      wp_mail function resides in the core WordPress files, so you will not find it in your theme’s functions.php file. Since it is already part of the core, you do not need to add it. Try installing Gmail SMTP plugin, and it should work.

      Admin

  21. Hi there, so happy to have found this tutorial! Can anyone tell me if you need to use a subdomain to setup Mailgun? We have set this up using our root domain and are having some issues and I am wondering if this could be why. Any advice would be appreciated! Thanks, Clare.

    • It can cause problems if you set it up with out one from what I’ve been reading, because if you set up the MX records for MailGun with your current e-mail address it can be problematic.

  22. Hi,

    I think I found an easy workaround for this problem. When setting up form fields, instead of using the generic email field I just use a different type of field and mark it as a “required” field. That way people will know that it is a required field and still provide you with a valid email address.

    I have just had the same problem with all of a sudden WordPress not sending me mail from anyone who has a gmail address. I’ve changed the field types and am again receiving emails from submitted forms.

    I’d be interested to see if anyone else would try to see if this works.

  23. First off…very informative article…including the YouTube video on setting up the Google Apps for Work. So thank you for that!

    A couple questions:

    I use Mad Mimi for my email marketing…and they sent the below article out a while ago telling Gmail users to not use Gmail addresses for sending out Mad Mimi email campaigns (which is what I used to do), but instead to use a custom domain. So that’s what I did. I set up a custom “[email protected]” address and have been using that. If I want to use the exact same “[email protected]” address for the Google Apps for Work setup to receive notifications from my WordPress site…will this mess up stuff with the Mad Mimi emails?

    Additionally, I currently have my personal Gmail setup to be able to send and receive email from the “[email protected]” address…so how is that effected as well? Do I need to delete that stuff out of there if I go with this Google Apps for Work option to fix my issue with not receiving my WordPress notification emails?

    Thank you so much in advance for any clarification on this.

  24. Just wanted to say – thank you so much for this article! Has helped me fix my forms :) not sure what the issue was before, if it was the server or what – but the mailgun solution worked perfectly for me.

  25. Great article! Thank you for sharing!

    1) Why does the mailgun HTTP API not require a username and password like the SMTP solution does? Is it because mailgun is verifying at the DNS level (with its SPF and domain key records) and with the API — so this setup removed the need for the SMTP credentials?

    2) Am I correct that these sending issues (being rejected by Google or Yahoo’s mail servers) are mostly because people are trying to send email from their WP installations but are using a [email protected] to send email from a WP install at example.com?

    3) Would mailgun allow someone to send email as [email protected] even though the mail is coming from the WP install at example.com

    Thanks for your help!

    • Thanks Lucas, Me too!
      Postman SMTP solved all my email woes.. I’ve been trying to test mail function on WordPress installed on localhost under Xampp for a day or two.
      I’m brand new to WordPress and I’m learning that the secret to a happy life is getting the right Plugin.. recommendations are invaluable.

  26. I need help. I have successfully installed mailgun using your videio How to Fix WordPress Not Sending Email Issue, but my email notifications still do not send. Do I have to enter some code into each email template? I have no idea what I am doing.

  27. You should really warn people about changing the mx records. It ruined my incoming mail for 5 hours and i had to change them back.

  28. I set this all up and never got an activation email from Mailgun. Pretty pathetic that an email smtp service can’t even figure out their own account activation system through….ugh….email.

    I sent a support ticket in. Now, because I changed the settings on my hosting, NONE OF MY EMAIL IS WORKING. I have tried three different emails to activate the account, and none have gotten the activation email.

  29. Amazing video, amazing tutorial. Nice solution. Perfect! Mailgun is amazing, thanks a ton guys!

  30. Thank you for tutorials. I couldn’t proceed because I was having the following error “Your account is temporarily disabled. Business Verification Please contact support to resolve”. I have raised two tickets already, it doesn’t seem to be helping. Any idea what I need to do to get this resolved?

    • Mailgun has internal checks in place which may sometimes flag an innocent account as suspicious. You simply need to contact their support, they will ask you a few questions about your email usage and will unlock your account.

      Admin

  31. Oh man thank you so much for this! You’re lifesavers! Mails from my wp-site used to end up in Spam, now they reach the inbox with no problems… One thing worth mentioning may be that the domain you set up in Mailgun doesn’t show up in WP mails to users/customers, so you don’t have to use a matching domain for your site. You can setup mail1.example.com in Mailgun for your WordPress site anotherexample.com and it works.

  32. My domain name is attached to Google Apps emails, I don’t want to mess up things. Can I instead use .org version of my domain name. I have .org and it is just parked (redirecting to .com) unused.

    Thanks

  33. Just make it easy and use SendGrid. You just create a general API and then add it into the settings of the SendGrid plugin on the site you need to use it on.

  34. Hi you mention needing the shortcode for later in the video, where do you use the shortcode? Does it replace gravity forms?

  35. Oh man, where were you last week with this? I spent four days of vacation working all this out on my own.

    However I do not see my problem listed, which was using Yahoo mail.

    Been a yahoo user since 2000 so hated to give way but finally set up new gmail accounts on all my websites which changed everything. I now have those accounts all forwarding to Yahoo, each with a note in the from address telling me their source.

    There may have been a way to make Yahoo work, but I didn’t find it and finally gave up. This is a better setup because it lets me set up separate mailing lists and work with mail chimp and sumo me. So far in the last week we have collected over a hundred new members on one site, the difference is that now I get to see each one as it comes in, can delete my yahoo notice and still have the record on Gmail archives.

    Having said all this, this page is being bookmarked for future reference. Thanks, it was almost timely.

Leave a Reply to Michael Tillman Cancel reply

Thanks for choosing to leave a comment. Please keep in mind that all comments are moderated according to our comment policy, and your email address will NOT be published. Please Do NOT use keywords in the name field. Let's have a personal and meaningful conversation.