WordPress email diagnosis
WordPress Is Not Sending Emails
Contact forms, password resets, and admin notices fail for different reasons than WooCommerce order mail. Start with whether WordPress queued a message, then whether the host accepted it, then whether Gmail rejected the domain.
Direct answer
Most WordPress sites call wp_mail(), which uses PHP mail() unless an SMTP plugin replaces it. Shared hosts often accept that mail and then a receiving inbox drops it because SPF, DKIM, or DMARC does not match the From domain. A smaller set never leaves the server: WP-Cron never ran, a plugin fatals before send, or the host disabled PHP mail.
Symptoms
- Contact Form 7 or WPForms shows “sent” but nothing arrives, including spam
- Password reset links never appear
- You get a bounce from the host or from
mailer-daemon - WooCommerce order emails fail while the contact form works, or the reverse. Use the WooCommerce email guide for store mail.
Diagnostic sequence
- Confirm WordPress tried to send. Install a mail logger on staging, or check the form plugin’s log. If nothing is logged, the form never reached
wp_mail(). - Send a test with WP Mail SMTP or FluentSMTP to a Gmail address you control. Open the original message headers. You want
spf=pass,dkim=pass,dmarc=pass. - Run the free WordPress email checker. It reads public SPF, DKIM, DMARC, and MX. It does not send a test message.
- If DNS is clean and PHP mail is still used, the host is the weak hop. Authenticated SMTP through the domain’s real mailbox or a transactional provider is the usual fix.
- If nothing is queued at all, check WP-Cron vs a real system cron. A site behind a cache that never gets uncached visitors can stall cron. That is a different failure than spam.
What not to do
- Do not point SPF at five ESPs with
~alland hope. One sender, aligned From domain. - Do not “fix” it by changing the From address to a Gmail address you do not control. Gmail will reject or spoof-mark it.
- Do not keep sending tests from production after a block. You train the inbox to distrust the domain.
When to hand it to an engineer
If DNS is wrong, SMTP auth fails, or WooCommerce and WordPress disagree on the From domain, a short scoped fix is cheaper than guessing records. WordPress Email Deliverability Fix starts from $129. Final quote after review.
Also: email checker · bug fixing · WooCommerce emails
