Out of the box, WordPress sends mail through PHP on your web server — an unauthenticated stranger knocking on Gmail’s door. Sometimes it gets in, often it lands in spam, and sometimes it just disappears, which is how “the contact form is broken” tickets get filed about a form that works fine. The fix is routing mail through a real, authenticated sending service. You’ll need admin access, the ability to edit your domain’s DNS, and about forty minutes.
Send a test and see where it lands
First, prove the problem. With WP-CLI:
wp eval 'wp_mail("you@gmail.com", "WP mail test", "Sent at " . date("H:i"));'
(No WP-CLI? The free Check Email plugin does the same from the admin.) Send it to a Gmail or Outlook address you control, then check the inbox and the spam folder. In spam — or nowhere at all — is the “before” you’re fixing.
Pick a mail service and get credentials
You want a transactional email service: Postmark, Brevo, SendGrid,
Mailgun, or Amazon SES if you’re comfortable with AWS. Free tiers cover
what most sites send in a month, and any of them beats your web server at
this job. Sign up, verify your domain with them (they’ll walk you
through it), and note the API key or SMTP credentials they give you. One
rule: your from address must be on your own domain —
forms@yourdomain.com, never a Gmail address.
Install and configure an SMTP plugin
WP Mail SMTP is the standard; Post SMTP is a fine alternative with good logging:
wp plugin install wp-mail-smtp --activate
In the setup wizard, pick your mail service as the mailer, paste the credentials, and set the from name and address. Prefer the API/mailer integration over generic SMTP host-and-port when the plugin offers one — fewer things to typo. Turn on email logging if your tier includes it; the first time a receipt goes missing, that log is worth the setting.
Line up your DNS with the sender
Here’s the part that actually gets you into inboxes: your domain’s DNS has to vouch for the new sender. Your mail service gave you DKIM records and an SPF include when you verified the domain — add them, and make sure a DMARC record exists. If those three acronyms are new, do email authentication first; this lesson assumes it. The trap to avoid: a second SPF record. You get exactly one, so merge the service’s include into your existing record, don’t add a new line.
Verify with a form-submission round trip
The real test isn’t a test button — it’s the path your visitors use.
Open the site in a private window, submit the actual contact form, and
watch for the notification at your address (and the auto-reply, if the
form sends one). Then open the received message in Gmail, choose “Show
original,” and read the verdict line: you want SPF: PASS, DKIM: PASS,
DMARC: PASS, all three. When they pass and the message sits in the
inbox instead of spam, you’re done — WordPress mail is finally showing
up with ID. Do the round trip again whenever you change DNS or mail
providers; it’s a two-minute check that catches a silent failure weeks
before a customer would have told you.