Email errors
Emails not arriving, Resend errors, domain verification and spam.
Email errors show in your terminal (locally) or in Vercel's Logs (live site) as:
Email to someone@example.com failed: <Resend's reason>Find Resend's reason below. Resend's own log at resend.com/emails shows every attempt and what happened to it.
Missing environment variable RESEND_API_KEY.
Why: the live site tried to send an email, but RESEND_API_KEY isn't set. (Locally, emails print to the terminal instead.)
Fix: set up Resend, add RESEND_API_KEY and EMAIL_FROM in Vercel, and redeploy.
The yourdomain.com domain is not verified
Why: the domain in EMAIL_FROM hasn't passed Resend's DNS check yet.
Fix:
- Open resend.com/domains and select the domain. Each record shows whether it's found.
- For any record marked as failing, check at your DNS provider that the type, name and value match exactly. Common mistakes:
- The name includes the domain twice, such as
send.yourdomain.com.yourdomain.com. Most providers add the domain for you: entersend. - The DKIM value was cut off when copying.
- A second SPF record exists for the same name. There must be only one
v=spf1TXT record per name: merge them.
- The name includes the domain twice, such as
- Click Verify in Resend. DNS changes can take from minutes up to 48 hours to spread.
You can only send testing emails to your own email address
Why: EMAIL_FROM isn't set, so the kit uses Resend's testing sender onboarding@resend.dev, which only delivers to your own Resend account email.
Fix: verify your domain and set EMAIL_FROM="Your Product <hello@yourdomain.com>".
API key is invalid
Why: RESEND_API_KEY is wrong, has extra spaces or quotes, or was deleted.
Fix: create a new key at resend.com → API Keys, update it in .env.local or Vercel, restart or redeploy.
Invalid \from` field`
Why: EMAIL_FROM isn't a valid sender. It must be email@domain or Name <email@domain>.
Fix: in .env.local, quote it, because of the spaces and angle brackets:
EMAIL_FROM="Your Product <hello@yourdomain.com>"In Vercel, enter the value without the outer quotes.
Too many requests / rate limit exceeded
Why: Resend limits how many emails per second you can send, and the free plan has a daily and monthly limit.
Fix: check your usage in the Resend dashboard; upgrade the plan if you've outgrown it.
Emails arrive in spam
- Make sure the domain is fully Verified in Resend (SPF and DKIM).
- Add a DMARC record at your DNS provider. A simple start: type
TXT, name_dmarc, valuev=DMARC1; p=none;. - Send from your own domain, not a free address.
- Use a sender name people recognise, and keep emails short and plain.
- New domains build reputation over time: early emails are more likely to go to spam.
Emails don't arrive and there's no error
- Check spam, and Promotions in Gmail.
- Check resend.com/emails. Delivered means it reached the recipient's mail server; look in their spam. Bounced means the address doesn't exist or rejected it.
- Locally without a Resend key, emails are printed in the terminal, not sent.
Setup errors with Resend or Cloudflare
See Setup errors → Email.