Fixing WordPress contact form email delivery

Why WordPress contact form emails fail and how to fix them by configuring SMTP, setting up email authentication records and troubleshooting common deliverability problems.

If your WordPress contact form isn't sending emails, or the messages are landing in spam instead of the inbox, you could be losing enquiries without realising. It doesn't just affect contact forms. Password reset emails, WooCommerce order emails, new user notifications and every other email WordPress sends can be affected by the same underlying problem.

If password reset emails aren't arriving and you're locked out as a result, our guide to regaining access to WordPress admin covers other ways back in. For WooCommerce, see our guide to fixing WooCommerce order emails.

The fix is well understood, and once email is set up properly it tends to stay reliable. Part of it happens in WordPress and part of it happens with your email provider and your domain's DNS settings, so you may need their help for some steps.

Why WordPress emails fail

By default, WordPress sends email through PHP's built-in mail() function, which relies on your web server's own mail setup.1 Many hosts handle this well enough, but emails sent this way often aren't properly authenticated. Email providers such as Gmail and Outlook treat unauthenticated email with suspicion, so these messages can end up in spam, get rejected or never leave the server at all. Some hosts also limit or block this kind of sending.

The "From" address matters too. By default WordPress sends from wordpress@ followed by your domain,1 and form plugins let you change it. If a form is set to send "from" an address at a free email service (like Gmail or Outlook) rather than your own domain, receiving servers can see that the email didn't really come from that service, and it's much more likely to be treated as spam.

Check your form plugin's settings

Before changing anything else, check your form plugin's notification settings:

  • Make sure notifications are switched on and the To address is correct.
  • Set the From address to an address on your own domain (for example, [email protected]), rather than a free email address. Your email provider can tell you which addresses are set up to send for your domain.
  • Set the From Name to your site or business name so people recognise the sender.
  • If you want to be able to reply directly to the person who filled in the form, use the plugin's Reply-To setting for their address, rather than putting it in the "From" field.

These settings alone won't fix a deliverability problem, but wrong values here can stop emails arriving even when everything else is set up correctly.

Send through an email service

The most reliable fix is to stop relying on mail() and send WordPress's email through a proper email service instead, using SMTP or the service's own API. WordPress's handbook describes this as the recommended approach for most sites that don't run their own mail server.1

You'll need two things: an SMTP plugin from the WordPress plugin directory, and an email service to send through. That might be a dedicated transactional email service (built for automated emails like form notifications and order confirmations, often with delivery logs), your hosting provider's email service or the email account you already use for your domain. Check your email provider's terms and sending limits before using an everyday mailbox for website email.

In the plugin's settings:

  1. Set the From address to an address on your domain and the From Name to your business name.
  2. Choose the email service and enter the SMTP details or API key from your provider's dashboard. Treat these like passwords.
  3. Send a test email from the plugin's settings to confirm it works.

Set up email authentication records

Even when sending through a proper service, receiving servers may still distrust your emails if your domain's DNS records don't confirm that service is allowed to send for you. There are three records to know about:1

SPF lists the servers allowed to send email for your domain. A domain should only have one SPF record,2 so if you already have one (for example, for your normal email), the new service needs adding to it rather than a second record being created.

DKIM adds a digital signature to each email so the receiving server can check it really came from an authorised sender and wasn't changed along the way. Your email service gives you the DKIM record to add.

DMARC ties SPF and DKIM together and tells receiving servers what to do with email that fails those checks: deliver it, send it to spam or reject it. Large email providers increasingly expect it.3

Your email service's documentation will give you the exact records to add, and your domain's DNS is usually managed at your domain registrar or hosting provider. These records affect all email from your domain, not just your website's, and a mistake (particularly a strict DMARC policy set up wrongly) can stop your everyday email being delivered too. If you're not confident editing DNS, ask your email provider, domain registrar or IT support to add them for you. DNS changes can take anywhere from a few minutes to a day or two to take effect everywhere.

Check spam folders and sending limits

Sometimes emails are being sent but land in the recipient's spam folder. Check spam folders, and mark your messages as "not spam" if you find them there.

Also check whether your hosting account or email service has a sending limit. Many hosts limit how many emails you can send per hour or per day, and once you hit it, further emails are delayed or dropped. Your host or email service can tell you what the limits are.

Check for plugin conflicts

Security plugins and firewall rules sometimes block outgoing connections to email services. If everything looks right but emails still aren't sending, try temporarily deactivating your security plugin and sending a test. Note its settings first so you can switch it back on exactly as it was, and turn it back on straight away afterwards. If email works with it off, look in its settings for rules about outgoing connections, or ask the plugin's support.

Use email logging to narrow it down

If you're not sure whether emails are failing to send or failing to arrive, an email logging plugin can help. It records every email WordPress tries to send, whether it was sent and any error message. Many SMTP plugins include logging.

Logs contain the content of form submissions, which can include people's personal details, so set the plugin to delete old entries and switch logging off when you no longer need it.

Test properly

When testing, send messages to a real email address at a major provider rather than to another address on your own domain. Emails between addresses on the same server can skip the usual checks and look fine when external delivery would fail. Testing with more than one provider (for example, Gmail and Outlook) is worthwhile, since each filters spam differently.

If the problem is too many emails rather than too few, because your form is being flooded with spam submissions, see our guide to dealing with WordPress spam.

Need help with email delivery?

If form emails still aren't arriving after these steps, my WordPress development service and emergency WordPress support can check your WordPress email setup, SMTP plugin and form settings. For DNS records and your email account itself, your email provider or domain registrar is the best source of help.


  1. Mail, WordPress Advanced Administration Handbook. ↩ ↩ ↩ ↩

  2. RFC 7208: Sender Policy Framework (SPF), section 3.2, IETF. ↩

  3. Email sender guidelines, Google Workspace Admin Help. ↩

Adam Greenough

Written by Adam Greenough

Freelance web developer with over 15 years of experience building and fixing WordPress sites. I work with businesses across the UK on everything from emergency support to full builds.

Need emergency WordPress support today?

If your site is down, hacked or throwing errors, send me the details and I will assess the problem quickly. Support starts from £50, you will get a fixed quote before any work begins, and if I cannot fix the issue, you will not pay.