# Formspree not sending email: how to fix it

_By Luka Brzin, Senior Product Marketing Manager_

When Formspree stops sending email, the submission usually still reached Formspree: the email is what failed. Check five things in this order: your spam folder (and Outlook's quarantine), the plan's monthly limit, whether your email server bounced Formspree, whether the form still posts to an email address instead of a form ID, and whether the address it sends to is verified. Your Formspree dashboard tells you which: if the submission is there, the form works and only delivery broke.

## Key takeaways

-   Open your Formspree dashboard first. A submission that is there but not in your inbox means delivery failed, not the form.
-   Past the monthly limit, Formspree keeps accepting submissions but stops emailing them, and holds them in an Over Limit folder until you upgrade.
-   If your mail server once rejected a Formspree email, Formspree blocks that address until you unblock it at `formspree.io/unblock/` followed by the address.
-   Forms that post to `formspree.io/your@email.com` are legacy forms that Formspree is phasing out; move them to a `/f/` form ID.
-   A form field without a `name` attribute is never sent, so its email arrives blank.

## Check these five things first

1.  **Spam, and Outlook's quarantine.** Search your mail for "formspree" rather than scrolling. Formspree's own guide to [missing emails](https://help.formspree.io/articles/troubleshooting/i-m-not-receiving-emails) starts here, and adds that Outlook 365 can quarantine the formspree.io domain, which hides messages from the junk folder too. A Microsoft 365 admin can release them from quarantine.
2.  **The monthly limit.** The Free plan includes 50 submissions a month ([Formspree plans](https://formspree.io/plans), checked October 2026). Past the limit, Formspree [keeps accepting submissions](https://help.formspree.io/articles/form-and-project-settings/over-limit-submissions) but sends no notification emails, emails you once to say so, and holds the rest in an **Over Limit** folder where you only see a preview of each. Upgrade, then reprocess them to get the emails.
3.  **Your mail server bounced Formspree.** If your server once answered a Formspree email with an error, Formspree blocks that address so it doesn't keep bouncing. Open `https://formspree.io/unblock/you@example.com` with your own address in place of the example.
4.  **The form posts to an email address.** Look at your form's `action`. If it is `https://formspree.io/you@example.com`, it is a [legacy form](https://help.formspree.io/articles/troubleshooting/phasing-out-legacy-forms-email-urls), and Formspree is phasing those out. A legacy form only delivers once you click its activation email: Formspree holds the first submission for 24 hours and [discards the ones after it](https://help.formspree.io/articles/troubleshooting/i-ve-missed-a-submission-because-my-form-wasn-t-activated) until then. Create a form in the dashboard and use its `https://formspree.io/f/` address instead.
5.  **The address it sends to isn't verified.** A form can only send to [your verified email addresses](https://help.formspree.io/articles/form-and-project-settings/changing-a-form-email-address). If you changed where the form sends, link and verify the new address in your account first.

## Is it the form or the email?

Send the form once with your browser's developer tools open on the Network tab, and look for the request to formspree.io.

-   **No request appears:** the form never sent. Check that the `action` is your Formspree address, the `method` is `post`, and no script stops the submit without sending it.
-   **A success, or a redirect to Formspree's thank-you page:** Formspree has the submission. Find it in your dashboard and work through the email checks above.
-   **A 429:** the form was sent more than 20 times in a minute, Formspree's rate limit for each form ([Formspree system limits](https://help.formspree.io/articles/form-and-project-settings/system-limits)). Wait a minute and try once.
-   **Another 4xx:** read the response. Formspree says what it refused.

To rule out your page completely, send a test from a terminal, with your form's ID:

```
curl -X POST https://formspree.io/f/YOUR_FORM_ID \
  -H "Accept: application/json" \
  -d "email=test@example.com" -d "message=Test from curl"
```

If that arrives and your form's doesn't, the problem is on your page.

## The email arrives, but it's blank

Browsers only send fields that have a `name` attribute, so an input without one reaches Formspree empty. Formspree's note on [blank emails](https://help.formspree.io/articles/troubleshooting/i-m-receiving-blank-emails) has the fix: give every `input`, `textarea` and `select` a `name`. Forms written by coding agents often set only an `id`, which isn't enough.

## It works on your computer but not on the live site

-   **A different form ID.** Projects often keep one form for development and another for production. Check the `action` in the deployed HTML, not in your editor.
-   **A script that expects JSON.** A form sent with `fetch` should send the header `Accept: application/json`; that is how Formspree tells a script from a page. Without it, Formspree answers the way it answers a browser form, with a redirect, which a script can mistake for a failure.
-   **Your host isn't the cause.** A form that posts to Formspree goes straight from the visitor's browser to formspree.io, so Vercel, Netlify or Cloudflare never see it. Only if your own server or a serverless function forwards the form does the host matter, and then its logs show the error.

## Symptoms and fixes at a glance

What you see

Most likely cause

Fix

In the dashboard, not in your inbox

Spam, quarantine or a bounce block

Search spam, release from quarantine, open the unblock page

Emails stopped mid-month

The monthly limit

Upgrade, then reprocess the Over Limit folder

Nothing in the dashboard either

The form never sent, or posts to an email address

Check the Network tab and the `action`

A 429 response

More than 20 posts in a minute

Wait a minute, then send once

Email arrives with empty fields

Fields without `name`

Add a `name` to every field

Works locally, not live

A different form ID, or a script without the JSON header

Check the deployed `action` and the request headers

## Keep the lead even when the email fails

Most of these failures share one thing: the lead exists, and nobody hears about it. Formspree handles the first half well. Submissions it accepts stay in your dashboard, so check it after any outage. The gaps are the ones above: leads past the limit stay hidden behind a preview until you pay, a legacy form discards everything after its first submission until it is activated, and nobody hears about a lead whose email bounced until they think to look.

Whatever you use, make the stored lead the source of truth and the email only the alert.

## How OllieLeads handles the same failures

OllieLeads is a form backend built on that rule: every lead is stored before your visitor sees the thank-you page, and you hear about it by email, Slack or Discord within a minute. Here is how the failures above play out on each (plans checked October 2026 on [Formspree's plans](https://formspree.io/plans) and [OllieLeads pricing](/pricing)):

When this happens

Formspree

OllieLeads

You use the free plan

50 submissions a month

500 leads in total, with no monthly reset

You pass the free limit

Kept in an Over Limit folder as previews, with no emails, until you upgrade

7 days with nothing changed, then new leads are kept for 30 days, showing the form, time, source and first name, until you upgrade

You need more

Personal: $15 a month for 200 a month. Professional: $30 for 2,000

Pro: $29 a month for 1,000 a month, then $10 for each extra 1,000, and capture never pauses

The alert email fails

The submission stays in your dashboard

The lead stays in the app, and the same alert can also go to Slack or Discord

A new form goes live

Legacy email forms wait for activation

No activation: a form takes leads as soon as its site is allowed

A visitor leaves halfway

Nothing is saved

Contact fields are saved with the OllieLeads script, after consent where the law asks for it

On OllieLeads, only leads with an email address or phone number count toward a plan; spam and test leads never do.

Formspree does some things OllieLeads doesn't. It takes file uploads, it has a longer track record and a catalogue of plugins, and at 2,000 a month its Professional plan ($30) costs less than OllieLeads Pro with one extra block ($39). If those matter more to you than the failures above, stay, and fix the cause with the checklist.

### Moving a Formspree form to OllieLeads

1.  **Create the form** in OllieLeads, or ask your coding agent: Claude Code and Cursor can connect it through OllieLeads' [remote MCP server](/developers).
2.  **Allow your site.** OllieLeads refuses browser posts from sites that aren't on the brand's allowed list, so add your domain first.
3.  **Change the `action`** to `https://ollieleads.com/f/YOUR_FORM_ID`. Field names stay as they are, and a `_next` field keeps working as long as it points at a page on your own site.
4.  **Send a test lead.** Posts from local development (`localhost` on port 3000, 5173, 4321 or 8080) count as tests automatically, so they never use up your plan.

A [side-by-side comparison with Formspree](/formspree-alternative) goes through the rest, and the guide to [contact forms not sending email](/blog/contact-form-not-sending-email) covers the same problem for any form service.

## FAQ

### Why does my Formspree form say it was sent, but no email arrives?

Because Formspree accepted it and the email is what failed. Open the form's submissions in your dashboard: if the submission is there, check spam and Outlook's quarantine, open Formspree's unblock page for your address, and check whether you passed the monthly limit, which stops the emails but not the submissions.

### Where does Formspree keep submissions when the email fails?

In the form's submissions in your dashboard. Submissions past the monthly limit go to an Over Limit folder instead, where you see only a preview of each until you upgrade and reprocess them ([Formspree](https://help.formspree.io/articles/form-and-project-settings/over-limit-submissions)).

### How many submissions does the Formspree free plan include?

50 a month. Paid plans start with Personal at $15 a month, or $10 a month billed yearly, for 200 submissions a month ([Formspree plans](https://formspree.io/plans), checked October 2026).

### Can I still post a form straight to my email address with Formspree?

Those are legacy forms, and Formspree is phasing them out: they expose your address to bots and rely on a header browsers now limit. Create a form in the dashboard and point your `action` at its `/f/` address.

### What should I use if Formspree's emails keep failing?

First fix the cause above: most are settings, not Formspree faults. If you want a service where the alert can fail without the lead being out of reach, compare [form backends](/guides/form-backend-for-static-sites) on what happens when email fails and when you pass a limit. OllieLeads stores every lead first and never stops capturing on a paid plan; Basin, Web3Forms and Netlify Forms are other options, each with its own free tier, so check their pricing pages before you switch.

Published with [SuperDuperSEO](https://superduperseo.com/published-by)
