Why am I not receiving emails from my website’s contact form?

Short answer: most of the time the form itself is fine. What breaks is the path from your site to your inbox. The connection your site sends mail through has stopped working, the mail is landing in spam, or visitors can’t reach the form at all. The fastest check is to send yourself a message through your own form, then look at your mail plugin’s error log.

What owners usually ask

“Is my contact form broken?” It usually starts with a feeling that the site has gone quiet. Inquiries used to come in, and now none do. Or a customer mentions they wrote weeks ago and never heard back.

That’s a good place to start, but it’s often not the real question. A contact form depends on three things, and any of them can fail without telling anyone:

  1. The page. Visitors have to be able to reach the form.
  2. The sending. Your site has to hand each message to a mail service that accepts it.
  3. The delivery. The receiving inbox has to trust that mail and put it where you’ll see it.

What’s usually happening

  • The sending connection has expired. Many WordPress sites send mail through a plugin such as WP Mail SMTP, signed in to Gmail or Google Workspace. When that sign-in stops working, every email fails, often with an error such as invalid_grant. It stops working when:
    • the account’s password changes;
    • access is removed in the Google account’s security settings;
    • the connection goes unused for six months;
    • the Google Cloud app behind it was left in “Testing”, in which case it expires after only seven days.
  • The mail goes to spam. Your domain needs SPF, DKIM and DMARC records saying your website may send mail for it. Without them, Gmail and Outlook may file your form’s messages as spam, or refuse them.
  • The form can’t be reached. A contact page left in draft, or a menu link to an old address, sends visitors to a “page not found” error. They won’t write to tell you.
  • Nobody is told. WordPress shows sending errors on the dashboard, if it shows them at all. If nobody logs in, nobody sees them. Depending on the form, the visitor sees a vague error and gives up, or a thank-you message even though nothing was sent.

How to check, in about ten minutes

  1. Send yourself a test. Fill in your own form from a different email address, then check the inbox it should reach, including spam.
  2. Read the error log. In WP Mail SMTP, open Tools, then Debug Events. Repeated errors, especially going back months, tell you when sending stopped.
  3. Look for saved entries. Some form plugins, or an add-on such as Flamingo, keep a copy of every submission inside WordPress. If yours does, the messages that never reached you are still there to read.
  4. Click your own Contact buttons. Try every “Contact” or “Book a call” link in the header, menu and footer, in a private window.
  5. Check your domain’s sender records. A free lookup tool shows whether your domain has SPF, DKIM and DMARC records, and whether they include the service your site sends through.

What happened on our own site

It happened to us. Our contact form looked fine. Behind it, the mail plugin’s Google sign-in had died 13 months earlier, and every email our site tried to send since then had failed: 922 in all. They included:

  • 479 contact-form notifications from our previous theme;
  • 315 from our current form;
  • 123 of WordPress’s own emails.

The only sign was a red notice on the dashboard.

The day we found it turned up two more problems:

  • Our Contact page was in draft, so the header’s “Contact” and “Book a call” buttons led to a “page not found” error.
  • Our form had no spam protection, so turning mail back on would have meant about five spam emails a day.

The good news: our current form had saved every submission inside WordPress, so nothing sent through it was lost.

What fixed it

  1. A backup first, saved off the server, before anything changed.
  2. Spam protection before mail. We added a honeypot, a hidden field that bots fill in and people don’t, and a short list of blocked words. Tested against the 300 saved submissions, the word list alone would have stopped 126 of them, and no real message.
  3. A fresh sign-in. We removed the dead Gmail connection and signed in again. If you do this yourself, check that the Google Cloud app behind the connection isn’t left in “Testing”, or the new sign-in will expire within a week.
  4. A test email, which arrived.
  5. The Contact page published again, and every Contact button checked.

What the evidence shows

  • Test email: arrived the same afternoon.
  • Errors: in the ten days since, the mail plugin has logged no sending errors, including for the one submission that came in.
  • Spam: submissions fell from about five a day to one in ten days.

A working form doesn’t bring in inquiries by itself. It makes sure the ones you get arrive.

When to bring someone in

Call someone if:

  • the error log shows errors you can’t make sense of;
  • the fix means changing a Google Cloud app or your domain’s DNS records;
  • you’d rather have the whole path checked at once.

Know what to fix next, and why.