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()returnstrueif 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.
- Install WP Mail SMTP (or a similar SMTP plugin) from
wp-admin → Plugins → Add New. - Go to WP Mail SMTP → Settings.
- 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. - Under Mailer, choose Other SMTP (or SMTP.com/similar generic SMTP option).
- Enter your mail server settings: SMTP Host:
mail.yourdomain.com. Encryption: SSL. Port:465(or use STARTTLS on port587). Authentication: on. SMTP Username: the full email address, e.g.contact@yourdomain.com. SMTP Password: that mailbox's password. - 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.