Your contact form says “Thank you, your message has been sent.” The visitor leaves happy. But the email never reaches you. For a business website this is one of the most expensive silent problems there is, because you do not know how many leads you have already lost.
The cause is rarely the form plugin itself. In most cases the email is sent by WordPress but rejected, filtered as spam, or never handed to a proper mail server. Here is how to find out which, and how to fix it for good.
Why WordPress emails go missing
By default, WordPress sends email with PHP’s built-in mail() function, straight from your web server. That causes three common problems:
- Your host limits or blocks it. Many hosts restrict outgoing mail from websites to stop spam.
- Receiving servers do not trust it. Gmail, Outlook, and others check whether the sending server is allowed to send for your domain (SPF, DKIM, and DMARC). Web servers usually are not, so the message lands in spam or disappears.
- The “From” address does not match your domain. If the form sends “from” the visitor’s Gmail address, Gmail rejects it as a forgery.
Step 1: Rule out the simple causes
- Check the spam and junk folders of the address that should receive the messages.
- Check the notification settings in your form plugin. Make sure the “Send to” address is correct and that notifications are turned on. In Contact Form 7 this is the Mail tab; in WPForms it is Settings → Notifications.
- Check whether the form stored the entry. WPForms Pro, Gravity Forms, and Fluent Forms save entries in the dashboard. If the entry is there, the form works and the problem is email delivery. For Contact Form 7, the free Flamingo plugin can store submissions.
Step 2: Send a test email from WordPress
Install an SMTP plugin such as WP Mail SMTP or FluentSMTP (both have free versions). Even before you configure anything, they include an Email Test tool. Send a test to your own address:
- If the test fails or never arrives, WordPress cannot send email at all. Continue to step 3.
- If the test arrives but form messages do not, the problem is in the form’s settings, usually the “From” address (see step 4).
Step 3: Send email through a real mail service (SMTP)
The reliable fix is to stop sending from the web server and send through a proper email provider instead. In your SMTP plugin, choose one of these:
- Your business email provider, such as Google Workspace or Microsoft 365. Good for low volumes like contact forms.
- A transactional email service, such as Brevo, Mailgun, SendGrid, Postmark, or Amazon SES. Best if you also send order emails from WooCommerce.
- Your host’s SMTP server, using an email account created on your domain.
Enter the SMTP host, port, encryption (TLS on port 587 is standard), and the username and password or API key the provider gives you. Then send another test email.
Tip: store SMTP passwords and API keys in wp-config.php if your SMTP plugin supports it, instead of in the database. Both WP Mail SMTP and FluentSMTP document how.
Step 4: Fix the “From” address
The “From” email must be an address on your own domain, for example hello@yourcompany.com, and it should match the account you configured in SMTP. Do not use the visitor’s address as “From”.
To let you reply to the visitor with one click, put their address in the Reply-To field instead. In Contact Form 7, add Reply-To: [your-email] under Additional headers. WPForms and most other plugins have a Reply-To setting in the notification options.
Step 5: Set up SPF, DKIM, and DMARC
These DNS records tell receiving servers that your mail is genuine. Your email provider gives you the exact values to add at your domain registrar or DNS host:
- SPF: a TXT record listing which servers may send mail for your domain. You can only have one SPF record, so add new providers to the existing record rather than creating a second one.
- DKIM: a TXT or CNAME record that lets receivers verify a digital signature on your messages.
- DMARC: a TXT record at
_dmarc.yourdomain.comthat tells receivers what to do with mail that fails the checks. Start withp=noneto monitor.
DNS changes can take a few hours to apply. Afterwards, send a test to a Gmail address, open the message, and choose Show original. You want to see PASS for SPF, DKIM, and DMARC.
Step 6: Check for conflicts and caching
- Caching plugins can serve an old copy of the form page with an expired security token, so submissions silently fail. Exclude your contact page from page caching.
- reCAPTCHA or other anti-spam tools can block real submissions if the keys are wrong or the domain is not registered with the key.
- Plugin conflicts: temporarily switch off other plugins (or use the Health Check & Troubleshooting plugin’s troubleshooting mode) and test again.
Keep it working
Turn on the email log in your SMTP plugin so you can see every message WordPress sends and whether it was accepted. Then submit your own form once a month. It takes a minute and catches problems before customers do.
Still not receiving form emails? We set up reliable SMTP delivery, fix the form settings, and check your SPF, DKIM, and DMARC records. Our WordPress Fix is a fixed $49, confirmed before we start. Request a fix.
Frequently asked questions
Why does the form say “sent” if the email never arrives?
The form only knows that WordPress accepted the message for sending. It cannot see whether the receiving mail server later rejected it or filed it as spam.
Do I need a paid SMTP service?
Not usually. Most providers have free tiers that easily cover contact form volumes. Paid plans make sense for busy WooCommerce stores.
Can I use my Gmail address to send WordPress emails?
You can connect a Google account through SMTP, but the “From” address should still be on your own domain for the best delivery. A free Gmail address as “From” is likely to fail DMARC checks.

