Skip to content

Common problem

Your contact form emails are landing in spam

The short answer

Nearly always, the form is sending as your visitor: their address in the From line, your web server doing the sending. Nothing authorises your server to send on their behalf, so the checks Gmail and Outlook run come back failed and the message is treated as forgery. The fix is the From address, not the wording of the email.

Where it breaks

  1. The form
  2. The address
  3. Sending
  4. A filter
  5. The inbox
  6. A person

Which one is it?

Work down the list. Each one takes less time than the one after it, and you can stop as soon as something matches.

  1. The form sends as the visitor

    Sending
    How to tell
    Open one of the emails that landed in spam and look at who it says it is from. If it is the visitor’s own address, this is it — and it is the default on more builders than not, because it makes hitting Reply convenient.
    What to do
    Put an address on your own domain in the From field, and put the visitor in Reply-To. You keep the one-click reply and lose the forgery signal. Every builder has both fields; the per-builder pages linked below name where they are.
  2. Your domain does not say who may send for it

    Sending
    How to tell
    Open the message source and look at the Authentication-Results header: spf=none or dkim=none means nothing is vouching for the sender. Google has required authentication for bulk senders since 2024, and the direction of travel is one way.
    What to do
    Publish an SPF record and sign with DKIM at whoever hosts your DNS, then add DMARC once both pass. If your site sends through a mail service or SMTP plugin, use that service’s records — it publishes them and they are the ones that matter.
  3. The server sends its own mail

    Sending
    How to tell
    No SMTP plugin, no mail service — the site hands the message to whatever PHP is configured to use. On shared hosting that is an IP address you do not control and whose reputation you did not earn.
    What to do
    Send through an authenticated service instead. It is the same change as the one above, and it also fixes the SPF and DKIM problem in one move rather than two.
  4. You taught your own mailbox to do it

    The inbox
    How to tell
    Only happens to you, not to colleagues on the same domain. Somebody marked one form notification as spam once — quite possibly an actual spam submission — and the filter generalised from it.
    What to do
    Mark the recent ones as not spam, add the sending address to your contacts, and give it a rule that keeps it out of the folder. Gmail and Outlook both weight an explicit rule above what they inferred.
  5. It is not in spam — it is somewhere else

    The address Where we come in
    How to tell
    Worth ruling out before you spend an afternoon on DNS. If the form’s notification address is not the mailbox you are searching, no amount of authentication will put the message in front of you.
    What to do
    Confirm where each form actually delivers first — it takes a minute and it is free. Then fix deliverability knowing which mailbox you are fixing it for.

43–69%

of the small-business sites we measured publish no DMARC record at all — nothing tells a receiving mailbox what to do with mail forged in their name. It is the one finding in that study with a one-line fix.

From our study of 598 contact pages

Where the setting lives

The exact menu path, per builder, with the field named.

Find out where your forms actually deliver

Our free check reads your contact page and tells you what it finds. No account, nothing installed, and nothing on your site changes.

Questions people ask about this

Will SPF on its own fix it?

Only if the form is already sending from your own domain. SPF authorises your servers to send as you; it says nothing about a message claiming to be from a visitor’s Gmail account. Change the From address first, then authenticate it — in that order, or the second step measures the wrong thing.

Why do only some of them go to spam?

Filtering is scored, not binary. A failed authentication check is points against, and the rest of the score comes from the message itself — links, attachments, how much of it is a quoted form field. Two submissions to the same form can land either side of the line, which is what makes this so maddening to diagnose by hand.

Does Humainbox fix this?

As a side effect, yes: what reaches you comes from our own authenticated domain with the visitor in Reply-To, so the forgery signal is gone. But fix your From address anyway. Every other email your site sends — password resets, receipts, order confirmations — has the same problem and we are not in the path of any of them.

More on this

Related

We would like to count visits with Google Analytics, which sets two cookies. Decline and nothing is loaded and nothing is sent. What these are.