WordPress Contact Form Not Sending Email: The Actual Diagnostic Checklist

The form looked like it submitted. The confirmation message appeared. The email never arrived.

This is one of the most common WordPress failures and one of the hardest to diagnose by guessing, because the failure can happen at any of four completely separate layers: the form plugin, the PHP mail function, the SMTP configuration, or your hosting environment. Each layer fails silently and each one looks identical from the front end.

This is not a plugin recommendation list. It is a diagnostic sequence. Work through it in order and you will find the layer that broke.

Step 1: Confirm the form is actually submitting

Before you investigate email delivery, confirm the form submission is completing at all. Some form plugins log submissions in the WordPress admin even when email delivery fails. Check your form plugin’s entries or submissions log. If submissions are recorded there, the form is working and the failure is in the email delivery layer. If no entries are recorded, the form is not submitting successfully and the problem is upstream of email entirely.

If submissions are not recording, open your browser’s developer tools (F12), go to the Network tab, and submit the form while watching for the request. A failed or blocked request here points to a JavaScript error, a plugin conflict, or a security plugin blocking the form’s POST request.

Step 2: Test PHP mail directly

WordPress sends email through PHP’s mail() function by default unless you have configured an SMTP plugin. To test whether PHP mail is working at all, install a plugin like Check Email or WP Mail Logging and use its built-in test send. Send a test email to an address you control and check whether it arrives.

If the test email does not arrive, PHP mail is the problem. This is almost always a hosting restriction. Many shared hosting providers disable or heavily restrict PHP mail to prevent abuse. Check your hosting provider’s documentation or support for whether PHP mail is enabled on your plan and what the sending limits are.

If the test email arrives, PHP mail is working and the failure is either in your form plugin’s configuration or in email deliverability.

Step 3: Check whether the email is being sent but landing in spam

Before assuming the email was never sent, check the spam or junk folder of every address you have been testing with. Also check your hosting provider’s mail logs if you have access to them. Email sent via PHP mail from a shared hosting server has poor deliverability by default: it comes from a server IP that is not associated with your domain, has no SPF or DKIM authentication, and gets filtered aggressively by most mail providers.

If you find the emails in spam, the sending mechanism is working. The problem is authentication and reputation. This is the most common real-world cause of contact form email issues on WordPress sites that have been running for more than a few months, and SMTP configuration is the fix.

Step 4: Configure SMTP

SMTP sends email through an authenticated mail service rather than through the server’s PHP mail function. This fixes deliverability problems, bypasses hosting restrictions on PHP mail, and gives you proper authentication headers that keep emails out of spam.

The most straightforward options: use your existing email provider’s SMTP credentials (Gmail, Outlook, or your domain email through your hosting provider), or use a transactional email service like Postmark, Mailgun, or SendGrid, all of which have free tiers that cover contact form volumes on most small sites.

Install an SMTP plugin (WP Mail SMTP is the standard choice), enter the credentials for whichever service you are using, and run the plugin’s built-in test send. The test result will tell you immediately whether the connection is working or whether there is a credential or authentication error.

If the test fails, the error message in the SMTP plugin is almost always specific enough to tell you exactly what is wrong: wrong port, wrong authentication method, app password required, or credentials that need to be regenerated. These are configuration problems, not code problems, and the SMTP plugin’s error output is the evidence you need to fix them.

Step 5: Check the PHP error log

If SMTP is configured and tested successfully but the contact form is still not sending, the failure is happening inside the form plugin itself. Something is preventing it from reaching the wp_mail() function that triggers the send.

Look at your PHP error log for entries from the time of a failed form submission. A fatal error or warning in your form plugin’s files will tell you exactly where execution stopped. Copy the complete error line and search for it, or paste it directly into your AI assistant or a support request to your plugin developer. The same silent failure pattern shows up in WooCommerce checkout failures too: the surface looks fine, the evidence is in the log.

Also check whether a recent plugin update coincides with when the form stopped working. Contact form plugins that hook into wp_mail() are sensitive to conflicts with other plugins that also filter or modify outgoing mail. A security plugin, an anti-spam plugin, or another form plugin active at the same time can intercept the mail call and prevent it from completing.

What to hand off if you still cannot find it

If you have worked through these steps and the form is still not sending, you have the information a developer needs:

  • Whether submissions are being recorded in the form plugin’s log
  • Whether a direct PHP mail test sends successfully
  • Whether SMTP is configured and what error the test send returns
  • Any PHP errors from the log at the time of a failed submission
  • Which plugins are active, particularly any security, anti-spam, or mail-related plugins

That is a complete picture. A developer with that information can diagnose the cause without asking you to reproduce the failure multiple times or describe what you see on the screen. The layers you have already eliminated are as useful as the layer where the failure is, because they narrow the search to exactly what is left.

Loupely captures the PHP error log, browser network requests, and plugin state at the moment of a failure and correlates them into a single diagnostic output. For form submission failures specifically, the combination of a blocked network request and a PHP warning in the same time window is often all it takes to find the cause. If contact form failures are costing you customers or leads: useloupely.com