Troubleshooting
The form says thank you, the order goes through, and nothing lands in any inbox. Before trying fixes at random, answer one question: do your emails fail to leave the site, or leave and fail to arrive? The fix is different for each, and this page takes them in order.
01 · The mechanics
Nothing bounced, nothing warned you, and the site itself reported success. That silence is built into how WordPress sends email.
Every email your site produces, from the contact form to the password reset, goes through one function, wp_mail(). Out of the box it hands the message to the web server’s PHP mail() function: no authentication, no password, posted from whatever address the server chooses. Spammers loved that arrangement, so most hosting companies now throttle it, filter it or switch it off, and receiving servers distrust what still gets through.
Two properties of this setup matter for diagnosis. WordPress does not record what it sends, so there is no built-in list to consult. And when the receiving side discards the message as unauthenticated, nothing comes back: the failure is invisible from your side. Which is why step one is not a fix at all, it is getting visibility.
02 · Triage
Ten minutes with an email log answers it. Any logging plugin will do; Custom SMTP starts recording at activation, before any configuration.
Install and activate Custom SMTP, or any plugin that logs email. From that moment, every message your site tries to send gets a row with its outcome.
Submit the form, request a password reset, or use the plugin’s Send Test Email button. Then open the log and find the row it just created.

03 · Not sent
A failed row carries the error the server returned, and that sentence names the cause. These are the ones behind almost every “nothing sends” report.
mail(). Common on modern hosting, and the host is not wrong to do it. Do not ask for it back: unauthenticated mail lands in spam anyway. The fix is sending through an authenticated SMTP server instead, which is section 05.The failure section of the docs matches the exact error messages, word for word, to their causes.
04 · Not delivered
Sent means a server accepted the message. What the receiving side did with it next is a judgement about your domain, and it happens in three DNS records.
05 · The durable fix
Every cause above ends at the same place: stop relying on unauthenticated server mail, send through a provider that vouches for you, and keep the log so the next failure has a visible cause.
You almost certainly have such a provider already: your hosting plan includes an SMTP server, and Gmail, Outlook, Brevo, SendGrid and the others all take authenticated mail from WordPress. Pick yours from the list below; each guide shows where the credentials live, the exact settings the preset fills in, and the pitfalls that provider hides.
Everything this page relies on, the SMTP sending, the log, the test buttons and the failure alerts, is in the free plugin. There is no paid tier holding the useful part back.
Twelve step-by-step guides: Gmail, Outlook, Amazon SES, SendGrid, Mailgun, Brevo, Postmark, Mailjet, Zoho, Yahoo, iCloud and Scaleway, plus any SMTP server your host provides.
06 · FAQ
The short versions, with the long versions one link away.
Both, by design. WordPress hands email to the server’s mail() function; the host restricts that function because spammers abused it. Neither side is going to change, which is why the durable fix is authenticated SMTP rather than a support ticket.
The form plugin reports that it handed the message to WordPress, nothing more. Whether a mail server accepted it, and what the receiving side did next, is exactly what it cannot see. An email log shows the difference in one glance: a failed row with an error, or a sent row that the receiver then discarded.
No. Authenticated SMTP, an email log, previews, resend and failure alerts are all in the free Custom SMTP plugin, with no account to create and no pro version. Some other SMTP plugins put the log or the alerts behind a paid tier; that is a pricing choice, not a technical requirement.
Only when the cause is two mailer plugins fighting, or a form plugin with its notifications off. The underlying problem, unauthenticated server mail that receivers distrust, stays whatever the theme. Diagnose with the log first; it is faster than elimination.
Something changed off your site: the host tightened its mail policy, or a mailbox provider raised its authentication requirements, as the large ones periodically do. Your email was surviving on tolerance, and the tolerance ended. The fix is the same durable one, and it survives the next tightening too.
The docs match each exact error message to its cause, screen by screen, and the support forum is read and answered.