In short

Why is Gmail not receiving my contact form messages?

Gmail hides or refuses form messages that claim to come from an address the sending server cannot prove it may use. Send them from an address on your own domain, put the visitor's address in Reply-To, and add SPF, DKIM, and DMARC records so Gmail can check each message.

On this page
  1. Who is this for?
  2. Why does Gmail hide or block contact form email?
  3. 1. Where did the message actually go?
  4. 2. Which address is your form sending from?
  5. 3. Which server sends the message?
  6. 4. How do you set up SPF for form email?
  7. 5. How do you set up DKIM for form email?
  8. 6. How do you set up DMARC for form email?
  9. 7. What does a complete setup look like?
  10. What if the lead emails come from Qualiform?
  11. What are the common mistakes?
  12. When is this not worth doing?
  13. How do you know it is working?

Fixing missing contact form email means making each form message prove it comes from your domain, so Gmail trusts it enough to deliver it. These seven steps work for any business whose website form sends inquiries to a Gmail or Google Workspace inbox.

Who is this for?

This is for you if your website has a contact form, and its messages land in spam, arrive late, or never show up.

It helps most if:

  1. Your form is on WordPress, Webflow, Squarespace, Wix, or a site someone built for you.
  2. You read inquiries in Gmail, or in Google Workspace with your own domain, like you@yourstudio.com.
  3. You can edit your domain's DNS records, or you can ask whoever set up your domain to do it.

DNS records are short lines of text stored with your domain name. Email providers read them to check who may send mail for your domain. You add them where you bought the domain, or where its DNS is hosted. You only need to copy the right values into the right boxes.

Why does Gmail hide or block contact form email?

Gmail checks each message for proof that the sender is who it claims to be. Contact form email often fails that check, for one of three reasons.

  1. The message pretends to come from the visitor. Many forms put the visitor's address, like jane@gmail.com, in the From line. Your web server is not allowed to send mail as gmail.com, so the message looks fake.
  2. Your web server sends it with no proof. A basic website often sends mail straight from the server it runs on. Your domain's records usually do not list that server, so nothing vouches for it.
  3. Your domain has no records, or broken ones. Without SPF, DKIM, and DMARC, Gmail has little to go on. It may send the message to spam, or refuse it.

Google lists its rules in its Email sender guidelines. Read them on Google's own site to see what it asks of every sender and of senders of large volumes. A small business form sends little mail. Setting up all three still takes about the same effort, and it leaves Gmail nothing to doubt.

1. Where did the message actually go?

Before you change any records, check that the message is really missing.

  1. Open Gmail and look in Spam.
  2. Search All Mail for the visitor's name or a word from the form. A filter may have archived it.
  3. Open Settings, then Filters and Blocked Addresses. Delete any filter that skips the inbox for your form's sender.
  4. If your domain forwards mail to a Gmail address, check the inbox at the domain too. Forwarding can break one of the checks below.

If you find the message, open it. Click the three dots at the top right, then Show original. Near the top, Gmail shows three lines: SPF, DKIM, and DMARC. Each says PASS, FAIL, or NONE. Write down what each says. That tells you which steps below you need.

If the message is nowhere, send a test through your form now. Then search again in five minutes.

2. Which address is your form sending from?

Open your form's email settings and find two fields: From and Reply-To. Some tools call them "sender" and "reply address."

Set them like this:

Field What to put there Example
From An address on your own domain forms@yourstudio.com
Reply-To The visitor's address, filled in by the form jane@gmail.com
To The inbox where you read inquiries you@yourstudio.com

This one change fixes many missing messages. Gmail now sees a message from your domain, and your records can vouch for it. When you press Reply, your answer still goes to the visitor, because Reply-To points there.

Never put a free Gmail, Outlook, or Yahoo address in From on mail your website sends. Those providers publish their own records, and your server is not on them.

3. Which server sends the message?

Your records can only vouch for servers you name in them. So you need to know which server sends your form email.

  1. Your web host's server. This is the default on many WordPress sites. It is the hardest to make reliable.
  2. Your email provider, through SMTP. SMTP is the standard way one program sends mail through another. An SMTP plugin or setting lets your form sign in to Google Workspace or another mail provider and send through it.
  3. A sending service. Some form tools and plugins send through a service built for automatic email. It gives you the exact SPF and DKIM values to add.
  4. The form tool's own servers. Hosted form tools often send from their own domain. Then their records do the work, not yours.

If your form sends from your web host's server, switch it to option 2 or 3. On WordPress, that usually means installing an SMTP plugin and typing in your mail provider's details.

Write down the name of the option you choose. Steps 4, 5, and 6 each need a value from it.

4. How do you set up SPF for form email?

SPF is a list of the servers allowed to send mail for your domain. It is one TXT record at the root of your domain, with the host name @.

  1. Look for a record that starts with v=spf1. A domain must have only one.
  2. Add an include: entry for each service that sends as your domain. Google Workspace uses include:_spf.google.com. Your form's sending service gives you its own value.
  3. End the record with ~all. That tells mail providers to treat any other server as suspect.

An example for a business that reads mail in Google Workspace and sends its form through a sending service:

v=spf1 include:_spf.google.com include:spf.yoursender.example ~all

Two limits catch people out:

  • One record only. Two SPF records make both fail. Merge them into one line.
  • Ten lookups at most. Each include: can set off more lookups behind it. RFC 7208, the SPF standard, sets the limit at 10 (section 4.6.4). Past that, SPF fails. Remove services you no longer use.

SPF checks the server that delivered the message. It does not check the From line a person reads. That is why SPF alone is not enough.

5. How do you set up DKIM for form email?

DKIM adds a hidden signature to each message. Gmail checks the signature against a public key stored in your DNS. If someone changed the message on the way, or you did not send it, the signature fails.

  1. Find the DKIM setting in your sending service or mail provider. In Google Workspace, it is in the Admin console. Google's own help pages show where to find it.
  2. Make a key. The service shows you a host name and a value.
  3. Add that record to your DNS. The host name looks like selector._domainkey. "Selector" is a word the service picks, like google or s1. Some services give a TXT record, and some give a CNAME record. Use the type they give you.
  4. Go back to the service and follow any steps it shows to turn on signing.

DKIM matters most when mail is forwarded. Forwarding breaks SPF, because a new server delivers the message. A DKIM signature travels with the message, so it still passes.

Each service that sends as your domain needs its own DKIM record. Your inbox provider's key does not sign mail from your form's sending service.

6. How do you set up DMARC for form email?

DMARC tells Gmail what to do when a message fails. It also sends you reports about who is sending as your domain. It is one TXT record with the host name _dmarc.

Start with this example:

v=DMARC1; p=none; rua=mailto:dmarc-reports@yourstudio.com
  • p=none means "deliver as usual, but tell me what you see."
  • rua= is the address that gets the reports. Use a mailbox you check.

A message passes DMARC when SPF or DKIM passes for the same domain as the From address. That match is called alignment. Under DMARC's default rules (RFC 7489), a subdomain like mail.yourstudio.com counts as a match for yourstudio.com.

Once two to four weeks of reports show your form and inbox passing, make the policy stricter:

  1. Change p=none to p=quarantine. Failing mail goes to spam.
  2. After a few more weeks of clean reports, move to the strictest policy, which tells mail providers to refuse failing mail. RFC 7489 lists its exact value.

Go slowly. If you missed a sender in step 4 or 5, a strict policy can hide your own form's email.

7. What does a complete setup look like?

Here is a full example for a made-up design studio at yourstudio.com. It reads inquiries in Google Workspace, and its form sends through a sending service. The sending service's values are placeholders. Use the ones your service gives you.

Record Type Host Value (example)
SPF TXT @ v=spf1 include:_spf.google.com include:spf.yoursender.example ~all
DKIM for Google Workspace TXT google._domainkey The key Google's Admin console shows you
DKIM for the sending service CNAME or TXT s1._domainkey The value your sending service shows you
DMARC TXT _dmarc v=DMARC1; p=none; rua=mailto:dmarc-reports@yourstudio.com

The form itself is set to:

Field Value (example)
From forms@yourstudio.com
Reply-To The visitor's address
To you@yourstudio.com

DNS changes can take from a few minutes to two days to show up everywhere. Wait at least an hour before you test.

What if the lead emails come from Qualiform?

In Qualiform, lead emails go to the people listed under Who hears about new leads on the form's Routing tab. If nobody is listed, every lead is still saved, but nobody is told. Check that list first.

Three more facts help when an email seems to be missing:

  1. Only finished conversations are emailed. A conversation is finished when the AI says your sign-off line, or when it reaches its turn limit. A visitor who leaves partway is still saved as a lead, but no email is sent.
  2. A conversation the AI closed early is never emailed. The AI closes a conversation early when the message is outside what your business does.
  3. Preview sends nothing. Preview sends no lead email and no Slack message. To test email, put the form on your own site and have a conversation there.

If an email never arrives, the lead is still in your leads list.

If a Qualiform lead email seems to be missing, look in Spam and All Mail first, as in step 1.

For a second alert that does not depend on email, see Slack notifications.

What are the common mistakes?

  1. Two SPF records. Adding a new v=spf1 line instead of editing the old one makes both fail. Keep one.
  2. The visitor's address in From. This fails DMARC every time. Put the visitor in Reply-To.
  3. Forgetting to start DKIM signing. Adding the record is half the job. You must also switch signing on in the service.
  4. Jumping to the strictest policy. A strict policy before you read any reports can hide your own form's messages.
  5. Testing from one address only. A test from your own Gmail can pass while a visitor's message fails. Test from an address on another provider too.
  6. Marking the sender safe instead of fixing it. A Gmail filter set to "Never send it to Spam" helps only your inbox. A colleague's inbox still gets the same problem.

When is this not worth doing?

Skip the DNS work when Show original already says PASS for SPF, DKIM, and DMARC. Then your records are fine. The problem is a filter, a forwarding rule, or the To address in your form settings.

Skip it when your form tool sends from its own domain and its messages already pass. Its records do the work. Your domain's records will not change those messages.

If you have no domain of your own, you cannot add these records at all. Then a hosted form tool that sends from its own domain to your Gmail address is the simpler choice.

How do you know it is working?

Run this check now, and again after any change to your form or domain:

  1. Send three test inquiries through your live form, from three different email providers.
  2. Find each one in Gmail and open Show original.
  3. Check that SPF, DKIM, and DMARC all say PASS.
  4. Check that the DKIM line names the domain in your From address.
  5. Press Reply and check that the reply goes to the test address, not to forms@yourstudio.com.

If all five checks pass for all three messages, Gmail can trust your form email. Once messages arrive, the next question is which inquiry to answer first. The guide to qualifying leads from your contact form covers that.

Common questions

How many SPF records can one domain have?

One. If a domain has two records that start with v=spf1, both fail. Put every sending service into a single line instead.

Should every domain have a DMARC record, even one that sends no email?

Yes. A domain that never sends mail can publish a DMARC record with the strictest policy, which tells mail providers to refuse every message from it. Then nobody can send convincing fake mail from it.

Do I need Google Workspace for this, or does free Gmail work?

Free Gmail works for reading inquiries. The records go on the domain in the From address, so you need your own domain. The inbox you read them in can be any Gmail address.

Does SPF check the From address a person reads?

No. SPF checks the server that delivered the message and a hidden return address. DMARC is the check that ties a passing result to the From address you see.

How long do DNS changes take to work?

Usually a few minutes to an hour, and sometimes up to two days. Wait at least an hour before you test. Then check the message with Show original in Gmail.