Get a free website with any plan

See how
WORDPRESS

Contact form emails not arriving (WordPress SMTP fix)

IN SHORT

Contact form emails go missing because WordPress's built-in wp_mail() function sends unauthenticated mail with no SPF or DKIM, so Gmail and Outlook often drop it silently. The fix: install WP Mail SMTP and send through your real mailbox's authenticated SMTP server instead.

If your WordPress contact form submits successfully but the email never shows up, the problem is almost always wp_mail(), WordPress's built-in mail function. It sends mail using PHP's mail() function with no authentication, no SPF alignment, and no DKIM signature, so receiving mail servers (especially Gmail and Outlook) increasingly drop it or bin it as spam. The fix is to stop using wp_mail()'s default transport and send through authenticated SMTP instead, using a plugin like WP Mail SMTP.

This is a WordPress-level fix, not a server-level one; it applies whether your form plugin is Contact Form 7, WPForms, Gravity Forms, or the block editor's native form. All of them call wp_mail() under the hood.

Why wp_mail() fails silently

wp_mail() hands the message to PHP's mail() function, which drops it into the server's local mail queue. From there it's sent with whatever the server's hostname happens to be, not necessarily a domain with valid SPF and DKIM records for that sending identity. Two things go wrong:

  • No authentication. The receiving server can't verify the message actually came from your domain, so it scores it as suspicious.
  • Silent failure. wp_mail() returns true if the message was handed off to the mail queue, not if it was delivered. A form can report "message sent" while the email gets rejected or spam-filtered downstream. There's no error in WordPress for you to see.

That combination is why this bug is so persistent: the site owner sees a success message, the visitor sees a success message, and the email is gone.

The fix: authenticated SMTP

Instead of the local mail queue, send through your mailbox's actual SMTP server with a real username and password. That gives the message a verified sending identity the receiving server can check against SPF and DKIM.

  1. Install WP Mail SMTP (or a similar SMTP plugin) from wp-admin → Plugins → Add New.
  2. Go to WP Mail SMTP → Settings.
  3. Set the From Email to a real mailbox on your domain, for example contact@yourdomain.com. Don't use a made-up address that doesn't exist; some spam filters check that the From address resolves to a real mailbox.
  4. Under Mailer, choose Other SMTP (or SMTP.com/similar generic SMTP option).
  5. Enter your mail server settings: SMTP Host: mail.yourdomain.com. Encryption: SSL. Port: 465 (or use STARTTLS on port 587). Authentication: on. SMTP Username: the full email address, e.g. contact@yourdomain.com. SMTP Password: that mailbox's password.
  6. Save, then use the plugin's built-in Email Test tab to send a test message to yourself and confirm it arrives.

The mailbox you authenticate with has to actually exist first. If you haven't set one up, create it from the portal: Services → click your hosting service → Email, then add the address. It's ready to use as SMTP credentials immediately.

SPF implications

SPF (Sender Policy Framework) is a DNS record that lists which servers are allowed to send mail for your domain. Sending authenticated SMTP through your own mailbox works cleanly here because Flashcloud auto-configures SPF and DKIM for hosted domains, so mail sent from mail.yourdomain.com already aligns with your domain's SPF record. That's a meaningful advantage over routing form mail through a third-party transactional service (SendGrid, Mailgun, etc.) under your own domain, where you'd need to manually add that provider's servers to your SPF record or mail can fail alignment checks and get flagged anyway.

One thing SPF doesn't cover: DMARC, which tells receiving servers what to do when SPF or DKIM fails, isn't configured automatically. For a contact form this rarely matters since you're sending from a real mailbox with SPF and DKIM already aligned, but it's worth knowing if you later add other sending services under the same domain.

If mail still isn't arriving

Work through these in order:

  • Check spam/junk folders first. Obvious, but it's the most common outcome even after switching to SMTP, especially on a brand-new domain with no sending history.
  • Re-run the Email Test in WP Mail SMTP after any settings change; it will show the exact SMTP error if authentication fails.
  • Confirm the mailbox credentials are correct by logging into webmail (Roundcube) with the same username and password you put in WP Mail SMTP.
  • Check the form plugin's own settings. Some form plugins (Contact Form 7 in particular) let you set a separate "From" address per form that can conflict with your SMTP From Email; keep them matching.
  • If the site was recently migrated or is slow generally, rule out unrelated performance issues; see My WordPress site is slow for a broader troubleshooting pass.

When to contact support

If test emails still fail after confirming the mailbox exists, the password is correct, and the SMTP settings match what's shown in Services → Email, open a ticket from Support → New ticket in the portal. Include the exact error from WP Mail SMTP's Email Test log; it tells our team in seconds whether it's an authentication issue, a DNS propagation issue, or something on the receiving end. Support is real humans via ticket or live chat, no phone tree.

Common questions

Why does my WordPress form say "message sent" but the email never arrives?

wp_mail() reports success as soon as it hands the message to the server's local mail queue, not when it's actually delivered. The message can still get rejected or spam-filtered downstream with no error showing up in WordPress.

Does this fix depend on which form plugin I use?

No. Contact Form 7, WPForms, Gravity Forms, and the block editor's native form all call wp_mail() under the hood, so the fix is the same regardless of which one you're using.

What SMTP settings do I use with WP Mail SMTP?

Use your mailbox's real SMTP host, like mail.yourdomain.com, with SSL on port 465 or STARTTLS on port 587, and authenticate with the full email address and its password. Set the From Email to a real mailbox on your domain, not a made-up address.

Do I need to set up SPF myself for this to work?

No. Flashcloud auto-configures SPF and DKIM for hosted domains, so mail sent from your domain's mailbox through authenticated SMTP already aligns. That's not automatic if you route form mail through a third-party service like SendGrid instead.

I switched to SMTP and my test email still isn't showing up. What now?

Check spam first, since that's the most common outcome even after switching, especially on a new domain. Then re-run the Email Test in WP Mail SMTP for the exact SMTP error, confirm the mailbox credentials work in webmail, and check your form plugin isn't set to a conflicting From address.

CAN'T FIND IT?

Real humans answer fast.

Hosting with us? Open a ticket and a real person replies - no scripts, no upsells. Still choosing a host? The same team is included with every plan, from day one.