Guide

Email deliverability for WordPress: stop your contact form emails going to spam

WordPress sites send email for contact forms, password resets, comment notifications, and WooCommerce order confirmations. If these land in the spam folder, you lose leads and get support tickets you did not ask for. The fix is usually a DNS record, not a plugin.

Why WordPress email goes to spam

By default, WordPress sends email through your hosting provider's mail server. This is the most common reason for deliverability problems. Most shared hosting providers have a poor sending reputation because thousands of sites on the same IP send spam. Gmail and Outlook have learned to distrust these IPs.

The receiving mail server does not care that you are a legitimate WordPress site. It checks your domain's DNS records and the sending IP's reputation. If either fails, the email gets filtered to spam.

The frustrating part: your hosting provider's email log shows "sent." The email left your server. It just did not reach the inbox. You have zero leads and no idea why.

The 6 records that decide delivery

Here is what the receiving mail server checks, in order:

  1. MX record: tells the mail server where to deliver mail for your domain. If this is missing, email bounces immediately.
  2. SPF record: lists the IP addresses and services allowed to send email as your domain. If your hosting provider's IP is not listed, the email fails SPF.
  3. DKIM record: a cryptographic signature that proves the email was not tampered with in transit. If the signature is broken or missing, the email fails DKIM.
  4. DMARC record: tells the receiving server what to do when SPF or DKIM fails. Without a DMARC record, Gmail and Outlook apply their own (stricter) policy.
  5. TLS/STARTTLS: encrypts the email in transit. If your mail server does not support TLS, some providers downgrade or reject the email.
  6. PTR / reverse DNS: maps the sending IP back to a hostname. If the PTR does not match the sending server, the email gets flagged.

Any one of these can break your deliverability. Most WordPress sites have at least one missing or misconfigured.

How to check your WordPress domain in 30 seconds

You do not need to run dig commands by hand. Inboxproof checks all 6 records in about 30 seconds. You type in your domain, it queries your live DNS, and gives you a score plus the exact records to fix. No account, no setup, nothing to install.

The report is public and shareable, which is handy when you need to send the findings to whoever manages your DNS (your developer, your agency, your hosting provider).

The WordPress-specific gotchas

1. You are sending from your hosting provider's IP

Most shared hosting providers use a shared IP for all their customers' email. This IP has a poor reputation because thousands of sites on the same IP send spam. Even if your SPF and DKIM are correct, Gmail and Outlook may filter your email based on the IP's reputation.

Fix: use a dedicated IP (if your hosting provider offers one) or switch to a transactional email service like SendGrid, Postmark, or Resend for your WordPress email. Most WordPress sites can use a plugin like WP Mail SMTP to route email through a dedicated service.

2. Your SPF record is missing or incomplete

If you use a transactional email service (SendGrid, Postmark, Resend, etc.), you need to add their include to your SPF record. For example, if you use SendGrid, your SPF record should include "include:sendgrid.net". If you use multiple services, add all of their includes.

Fix: check your current SPF record and add the includes for every service that sends email on your behalf.

3. Your DKIM record is missing

If you use a transactional email service, you need to add their DKIM record to your DNS. Each service has a specific selector (e.g., s1._domainkey.yourdomain.com for SendGrid). If the DKIM record is missing, the email fails DKIM.

Fix: check your email service's docs for the DKIM record and add it to your DNS.

4. Your DMARC record is missing

Gmail has been enforcing DMARC more strictly since early 2024. A domain with no DMARC record is treated as unauthenticated. Gmail filters these emails more aggressively. Set your DMARC record to at least p=quarantine, and ideally p=reject once you are confident your SPF and DKIM are correct.

Fix: add a DMARC record to your DNS. Start with p=none, monitor the reports, then move to p=quarantine and p=reject.

5. Your hosting provider blocks port 25

Many shared hosting providers block outbound port 25 (the standard SMTP port) to prevent spam. This means WordPress cannot send email directly through your hosting provider's mail server. You need to use a transactional email service instead.

Fix: use a transactional email service like SendGrid, Postmark, or Resend. Most WordPress sites can use a plugin like WP Mail SMTP to route email through a dedicated service.

How to monitor so a broken record never costs you a lead

Fixing the records is the first step. But records break. Your hosting provider changes something. Your DNS provider expires a record. A new include gets added. You do not get an email when this happens. You find out when a customer says "I never got the contact form response."

Inboxproof Pro monitors all 6 records daily and emails you the moment one breaks, expires, or changes. $29/month for up to 5 domains. For a WordPress site, that is one domain. For an agency managing multiple sites, the Agency plan covers up to 25 domains for $99/month.

Quick checklist

If any of these are missing, run a free audit and get the exact record values to add. Takes 30 seconds. No account needed.

Related guides

Check your WordPress domain now

Run a free 30 second audit on your domain. No account, no setup, reads your live DNS only.

Run my free audit

Audited by Inboxproof · live DNS checks · privacy