Proxy Mail QA

Test Supabase Auth emails

Supabase Auth emails your users to confirm sign-up, sign in with a magic link or code, accept an invite and reset a password. To test them, sign up with a fresh Proxy Mail QA address and the link or code shows up on its row. First set up custom SMTP: Supabase's default sender only delivers to your project's team, two emails an hour.

Updated

Limits below are from Supabase’s documentation on 17 October 2026. Check it for current details.

What Supabase sends

Each has its own template in the dashboard: Confirm signup, Invite user, Magic Link, Change Email Address, Reset Password and Reauthentication. By default they hold a link; add {{ .Token }} to a template to send a 6-digit code instead.

First: the default sender won’t email test addresses

Supabase’s built-in email service is meant for trying things out. Its documentation says it:

So sign-up tests fail before they start. Set up custom SMTP under Authentication → Emails (any provider: Resend, Amazon SES, Postmark, Mailgun and others), and make sure that provider isn’t in its own sandbox mode. Test email not arriving? covers each one.

The Site URL defaults to http://localhost:3000, so confirmation and magic links from your deployed app can send people to localhost. Set it to your app’s URL and add every environment to Redirect URLs. More in why emails link to localhost.

Test it by hand

  1. Create an address in Proxy Mail QA, with a persona and password if your form asks.
  2. Sign up in your app with it.
  3. The confirmation link or code appears on the address’s row within seconds. Open or copy it, and check where it lands.

Then do the same for a magic link, a password reset and an invite. Each email stays in the address’s inbox, so anyone on the project can check it later.

Automate it

signup.spec.ts
import { test, expect } from 'proxymail-qa/playwright';

test('Supabase sign-up confirms the email', async ({ page, qa }) => {
  const { address, password } = await qa.createAddress({ persona: true, password: true });
  const submitted = new Date();
  await page.goto('/signup');
  await page.getByLabel('Email').fill(address);
  await page.getByLabel('Password').fill(password);
  await page.getByRole('button', { name: 'Sign up' }).click();

  const { value: link } = await qa.waitForLink(address, { type: 'verify', since: submitted });
  await page.goto(link);
  await expect(page).toHaveURL(/staging\.example\.com/);
});

checkEmail(address, { expectHost: 'staging.example.com' }) also fails the test if the link ends up anywhere else. More in Test sign-up emails in Playwright. Built with Lovable, Bolt or v0? Their guides cover the Supabase settings each one sets up: Lovable, Bolt, v0.

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 accountOpen the app

Questions

Why does Supabase say "Email address not authorized"?

The default email service only delivers to members of your project's team, so any other address, including a test inbox, is refused. Set up custom SMTP (Resend, Amazon SES, Postmark and others) and Supabase can email any address.

Why do my Supabase emails link to localhost?

The Site URL in Authentication settings defaults to http://localhost:3000, and links redirect there unless redirect_to is allowed in the Redirect URLs list. Set the Site URL to your deployed app and add each environment's URL. Proxy Mail QA flags links that end up on localhost, even after a redirect.

Can I get a 6-digit code instead of a link?

Yes. Add {{ .Token }} to the email template and call verifyOtp with it in your app. Proxy Mail QA shows the code on the row, and waitForCode returns it in tests.

What about local development?

The Supabase CLI runs a local mail catcher (usually at localhost:54324) that only sees email from your local Supabase. Hosted projects send real email, which a Proxy Mail QA address receives.

See every email testing problem we solve

Supabase is a trademark of its owner. Proxy Mail QA is independent and isn't affiliated with or endorsed by them.