Skip to content
CH SCShop classwordpress · beginner · ~40 min · 5 steps

How to make WordPress send email reliably

Route WordPress mail through an authenticated SMTP service so form submissions, receipts, and password resets stop vanishing into spam.

August 10, 2026 · by Dane Petersen

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.

That's the lesson. Back to the shop for more — or if this is the chore your organization never gets to,that's literally what we're for.