Guide
Website form emails not arriving? How to fix them
The short answer
WordPress sends form emails through PHP mail on your web server, which many hosts do not set up well and which can fail the SPF and DKIM checks Gmail requires. Install an SMTP plugin, connect it to your mailbox or a sending service with a free tier, and add the DNS records it gives you.
The short version
- By default, WordPress sends form emails with PHP’s built-in mail function, straight from your web server. Many hosts do not set that up well, and the mail can fail the checks Gmail and others now run.
- WordPress cannot tell you if a message arrived. Its own docs say a “sent” result does not mean the email was received.
- The fix: install a free SMTP plugin, connect it to your business mailbox or a sending service, and add the DNS records that service gives you.
- Most small sites fit inside a free tier. Postmark, Mailgun, Brevo and Resend all list free plans, as of October 2026.
Why form emails go missing
WordPress sends every email through a function called wp_mail(). WordPress’s developer docs say it is set by default to use PHP‘s built-in mail() function. That means your web host‘s server tries to deliver the message itself.
Three things go wrong with that:
- The server is not set up for it. The WP Mail SMTP plugin listing says most WordPress hosts do not configure their servers properly for PHP email.
- It fails sender checks. Since February 1, 2024, Google has required everyone who sends to Gmail accounts to use SPF or DKIM. These are DNS records that prove a server may send for your domain. If your records do not cover the server that sends the mail, the check fails. Our SPF, DKIM and DMARC guide explains each one.
- Nobody tells you. WordPress’s docs say a true result from wp_mail() “does not automatically mean that the user received the email successfully.” The form shows “Thank you” either way.
Hosts also cap how much mail a site can send. A busy shop, or a form hit by spam bots, can reach that cap.
Host sending limits
These are the limits each host publishes for mail sent from its servers. Your mailbox limits can differ.
| Host | Published limit | Note |
|---|---|---|
| Hostinger | 10 per minute, 100 per day | Single, Premium and Unlimited plans |
| SiteGround | 400 per hour (800 on GoGeek or Cloud) | Up to 80 recipients per message |
| DreamHost | 200 recipients per hour per server, 40 per message | Mail from PHP scripts on shared servers |
| GoDaddy | 500 relays per day per email user; 500 per hour per account | cPanel hosting; 1,000 a day on Managed WordPress |
| Hosting.com | 100 per hour by default | Can be raised to 1,000 per hour; no bulk mail |
| InMotion | 250 per hour | Shared hosting default |
| Kinsta | 150 per day on the smallest plans, up to 3,000 on the largest | Shared across all sites on the plan |
| WP Engine | Hard hourly limit, number not published | No port 25 |
Three hosts go further and tell you to use an outside service. DreamHost recommends sending through SMTP on shared servers. WP Engine says it is not an email host and recommends a third-party mail provider. Cloudways says sending straight from its cloud servers can be unreliable. Kinsta’s built-in sending does not currently support DMARC alignment, so Kinsta suggests a third-party SMTP service if you need DMARC to pass.
The fix, step by step
SMTP is the standard way mail servers hand email to each other. An SMTP plugin makes WordPress log in to a real mail service instead of using PHP mail.
- Test first. Fill in your own form and send it to a Gmail address. Check the inbox and the spam folder. If it arrived, open it, click More (the three dots) next to Reply, choose “Show original,” and check that the SPF, DKIM and DMARC results say pass.
- Pick a sending route. Use the business mailbox you already pay for (Google Workspace or Microsoft 365), or a sending service from the table below. A sending service (also called a transactional email service) sends automatic emails such as form alerts and receipts.
- Install one SMTP plugin. WP Mail SMTP, FluentSMTP or Post SMTP. You only need one.
- Verify your domain with the service. The service gives you DNS records, usually for SPF and DKIM. Add them where your domain’s DNS is managed (often your registrar or Cloudflare). Google, for example, says DKIM can take up to 48 hours to start working after you add the record.
- Merge, do not duplicate, SPF. A domain may have only one SPF record. If you already have one, add the service’s include to it, for example
v=spf1 include:_spf.google.com include:mail.example.com ~all. - Fix the From address. Send from an address at your own domain, such as [email protected]. Put the visitor’s email in Reply To. Gravity Forms gives this same advice.
- Send a test again. Use the plugin’s test email, then submit the form once more and repeat step 1.
- Add DMARC if you have none. Start with a monitoring policy (p=none). Our DNS records guide shows the record.
Which SMTP plugin
- WP Mail SMTP has 4+ million active installs on WordPress.org. The free version connects to Brevo, Gmail, Mailgun, Postmark, Resend, SendGrid and any other SMTP server. Its built-in Microsoft 365, Amazon SES and Zoho Mail mailers need Pro, which is $49 for the first year, then $99 a year for one site.
- FluentSMTP has 700,000+ active installs and says it is free and will never release a pro version. It connects to Amazon SES, Google Workspace, Microsoft 365, SendGrid, Mailgun, Brevo, Postmark and others.
- Post SMTP has 300,000+ active installs. A paid Pro version adds more mailers.
If you use Microsoft 365 or Amazon SES and want to pay nothing, FluentSMTP covers both in its free version.
Sending services and what they cost
| Service | Free tier | First paid plan |
|---|---|---|
| Postmark | 100 emails a month, no overages | $15.00 a month for 10,000 emails |
| Mailgun | 100 emails a day | From $15 a month for 10,000 emails |
| Brevo | Up to 300 emails a day once approved | Paid plans listed on Brevo’s pricing page |
| Resend | 3,000 a month, 100 a day, 3 domains | $20 a month for 50,000 emails |
| SendGrid | Trial: 100 a day for 60 days, then sending stops | Essentials from $19.95 a month |
| Amazon SES | No set free emails; new AWS customers get up to $200 in credits | $0.10 per 1,000 emails |
Amazon SES is the cheapest per email, but new accounts start in a test “sandbox”: 200 messages a day, only to addresses you have verified, until you request production access.
Using your mailbox instead? Google says sending from a website through smtp.gmail.com is limited to 2,000 messages a day. A Microsoft 365 mailbox can send to 10,000 recipients a day. Both are plenty for most contact forms. Our email at your own domain page compares mailbox prices.
If you use Gravity Forms
Gravity Forms says it hands notifications to WordPress and has no control over delivery after that. It has its own add-ons for Postmark, SendGrid and Mailgun, included with every license. Licenses are $59 a year (1 site), $159 a year (3 sites) and $259 a year (unlimited sites).
Gravity SMTP, from the same company, routes all of your site’s email, not only form notifications. Its product page says it is only available with the Elite license; its FAQ says Nonprofit and Developer license holders can download it too. A regular SMTP plugin does the same job if you are on Basic or Pro.
Still landing in spam?
If your records pass and form emails still go to spam, work through our spam fixes checklist, or see the Gmail, Yahoo and Outlook sender rules. Start from the email deliverability hub for the full picture.
Sources: WordPress wp_mail() reference; plugin listings for WP Mail SMTP, FluentSMTP and Post SMTP; WP Mail SMTP pricing; host limits from Hostinger, SiteGround, DreamHost, GoDaddy, Hosting.com, InMotion, Kinsta, WP Engine (and its scope of support) and Cloudways; pricing from Postmark, Mailgun, Brevo, Resend, SendGrid (and its trial terms) and Amazon SES; SES sandbox; Google Workspace app sending; Exchange Online limits; Gmail sender guidelines; Gmail: see full headers; SPF standard (RFC 7208); Google DKIM setup; Gravity Forms notification troubleshooting, Postmark add-on, Gravity SMTP and pricing.
Questions people ask
Why does my contact form say sent but no email arrives?
WordPress only reports that it handed the message off. Its docs say a successful result does not mean the email was received. The message may have been blocked, rejected or sent to spam.
Do I need to pay for an SMTP plugin?
No. WP Mail SMTP, FluentSMTP and Post SMTP all have free versions on WordPress.org. FluentSMTP says it will never release a pro version. WP Mail SMTP Pro ($49 for the first year, then $99 a year) is only needed for some built-in mailers, such as Microsoft 365 and Amazon SES.
Can I send form emails through my Google Workspace account?
Yes. Google says sending from a website or app through smtp.gmail.com is limited to 2,000 messages a day for a Google Workspace account, which is plenty for most contact forms. Use an address at your own domain as the From address.
What From address should my form use?
An address at your own domain, such as [email protected]. Put the visitor's email in the Reply To field, so you can hit reply and reach them. Gravity Forms gives the same advice.
Keep reading
Would you rather have someone build it?
We also build and look after WordPress sites for US businesses. Flat fees from $700. This is our own service. It isn’t part of our rankings.