---
title: "Test email not arriving? Troubleshooting · Proxy Mail QA"
description: "Why a sign-up, login or reset email doesn't reach a Proxy Mail QA test inbox, and how to fix it: email providers in sandbox or test mode (Amazon SES, Resend, Mailgun, Postmark, Supabase), suppression lists, rate limits and what we refuse."
url: https://proxymail.qa/troubleshooting
---

1. [Home](https://proxymail.qa/)

# Test email not arriving?

Usually the email never left the app. Here’s how to tell, and how to fix the usual causes.

Updated October 13, 2026

## The one requirement

Your app needs to be able to email any address. Email providers in sandbox or test mode only send to addresses you've verified, so their mail can't reach any test inbox, ours included.

## Check the address in the app

In [the app](https://app.proxymail.qa/troubleshoot), open **Troubleshoot** from the account menu and paste the address. It shows whether anything has reached us for it and anything we refused, with the reason.

When we turn mail away, the address’s row on **Accounts** says so too. An address that has waited a couple of minutes with no mail gets a **Not arriving?** link.

Nothing reached us at all? Then the email stopped before it got to us. Work through the causes below.

## Usual causes

1. **The app's email provider only sends to verified addresses.** Sandbox and test modes, such as Amazon SES before production access or Resend without a domain, quietly skip every other address. See the list of providers below.
2. **The app didn't send it.** Check the app's logs or its email provider's dashboard for the message. A sign-up that failed, an email turned off in settings, or an error in a background job all look the same from here.
3. **The provider skipped the address.** If an earlier email to the address bounced (for example after it expired), the provider may have added it to its suppression list and won't send to it again. Remove it from the list, or use a new address.
4. **The address is mistyped.** Copy it from its row rather than retyping it. A +tag after the name is fine: name+run2@ still arrives at name@.
5. **The app is rate limited.** Auth services cap their emails, for example 2 an hour with Supabase's built-in email and 30 an hour by default with your own SMTP. A test suite that signs up often hits the cap first.
6. **The address has expired or its project is archived.** Mail to it is refused. Extend an address before it expires, or create a new one.
7. **We refused it.** Messages over 5 MB are refused, and an address takes at most 60 emails an hour. The address shows when we refuse something, and why.

## Email providers that only send to some addresses

Common while an app is new. Each one is a setting in the app’s email provider; no test inbox can receive mail it doesn’t send.

### Amazon SES

New accounts start in the sandbox, which only sends to verified addresses and domains. Each AWS Region has its own sandbox. **Fix:** Request production access for the Region your app sends from. [Docs](https://docs.aws.amazon.com/ses/latest/dg/request-production-access.html)

### Supabase Auth's built-in email

Only sends to members of your Supabase project's team, and only 2 emails an hour. **Fix:** Set up custom SMTP under Authentication. Then raise the hourly email limit under Rate Limits if your tests sign up often. [Docs](https://supabase.com/docs/guides/auth/auth-smtp)

### Resend

Until you verify a domain (while sending from onboarding@resend.dev), it only sends to your own Resend account email. **Fix:** Verify a domain and send from an address on it. [Docs](https://resend.com/docs/knowledge-base/403-error-resend-dev-domain)

### Mailgun

A sandbox domain only sends to up to 5 authorised recipients, who each have to confirm. **Fix:** Send from your own domain. Mailgun needs a paid plan or a card on file for that. [Docs](https://documentation.mailgun.com/docs/mailgun/user-manual/domains/domains-sandbox)

### Postmark

Until Postmark approves the account, it only sends to addresses on domains you have verified. **Fix:** Request approval in your Postmark account. [Docs](https://postmarkapp.com/support/article/1084-how-does-the-account-approval-process-work)

Firebase Authentication, Clerk and SendGrid send to any address. So does Auth0's built-in email, but only 10 emails a minute, so set up your own provider in Auth0 for test runs.

## What Proxy Mail QA refuses

Mail to an address that doesn’t exist, was deleted or has expired is refused. For live addresses, we refuse mail when:

- **Too large.** The message was over 5 MB, the largest we accept. The sender was told not to retry, so it won't arrive.
- **Hourly limit.** The address had already had 60 emails in the last hour. The sender was asked to try again later, so it may still arrive.
- **Daily limit.** Your space had reached its daily email limit. The sender was asked to try again later, so it may arrive after the limit resets at midnight UTC.

Each of these shows on the address with its time. We keep only the reason, the time and the size, never the sender or the message, and they’re deleted with the address.

## Still stuck?

Email [hello@proxymail.qa](mailto:hello@proxymail.qa) with the test address, when the app sent to it (with your time zone) and which email provider the app uses. Please don’t send passwords or API keys.

## Try it on your next sign-up test

Free plan, no credit card. Create an address and watch the code or link arrive.

[Create a free account](https://app.proxymail.qa/?mode=signup)

## Questions

### Can any test inbox receive mail from an email provider in sandbox mode?

No. A provider in sandbox or test mode doesn't send to unverified addresses at all, so there is nothing for Proxy Mail QA, or any other inbox service, to receive. Turn on sending to any address in the provider, as in the list above.

### Does Proxy Mail QA see mail that was never delivered?

No. We only know about mail that reached us. That is why the app can say “nothing has reached us”: in that case the email stopped before it got to us, usually at the app or its email provider.

### What does an agent or test script see when nothing arrives?

When a wait for a code or link comes back empty, the API and MCP server add a hint: what we refused for the address, or, when nothing has ever reached it, the likeliest cause, with a link to this page. They also list any refusals with their reason and time.

## Related guides

- [Test sign-up and email verificationA fresh, private address for every sign-up test, with the verification link or code ready the moment it lands.](https://proxymail.qa/solve/email-verification-testing)
- [Test OTP and one-time login codesCodes pulled out of the email with a Copy button and a countdown when the email says how long they last.](https://proxymail.qa/solve/otp-code-testing)
- [Test magic links and passwordless sign-inSingle-use links that are never opened or prefetched on our side, so they still work when you click them.](https://proxymail.qa/solve/magic-link-testing)
- [Test password reset emailsRequest, receive and use reset links, and keep the new password saved next to the test account.](https://proxymail.qa/solve/password-reset-testing)
- [Stop sharing one Gmail inbox for QAPrivate, disposable addresses for every tester instead of one shared mailbox and a pile of plus-addresses.](https://proxymail.qa/solve/shared-test-inbox)
- [Take QA notes by voice with Wispr FlowDictate what each test account is for, its state and what you found, straight into its notes, in seconds.](https://proxymail.qa/solve/voice-notes-wispr-flow)
- [Verification link points to localhost:3000Why emails from staging link to localhost, how to fix it in Supabase, Firebase and other stacks, and how we flag it.](https://proxymail.qa/solve/localhost-links)

[See every email testing problem we solve →](https://proxymail.qa/solve)
