Supabase Auth emails without SMTP: use the Send Email Hook with Notify
Route Supabase Auth password reset, magic link, and confirm-signup mail through Notify — no Custom SMTP, no SMTP relay from Notify.
Supabase Auth can send password reset, magic link, signup confirm, invite, and email-change messages. The default path uses Supabase’s own mail infrastructure. If you want your brand, your domain, and one transactional API across the rest of your app, wire Auth through Notify.
Notify is HTTPS-only (POST /api/email/send). It does not offer SMTP relay, so Supabase Custom SMTP (host, port, username, password) cannot target Notify directly.
The supported pattern is Supabase’s Send Email Hook: Auth POSTs a signed payload to your Edge Function; the function verifies the signature and calls Notify.
When to use this doc vs the recipe
| You need… | Start here |
|---|---|
| Why Hook vs SMTP, what gets covered, prerequisites | This page |
| Deployable Edge Function, secrets, dashboard hook steps, smoke test | Recipe: Supabase Auth → Notify |
| Non-Auth email from Supabase Edge (cron, triggers you invoke) | Send email from Supabase Edge |
The recipe is the implementation source of truth — this page is the decision guide and checklist so you do not duplicate setup in two places.
What the hook sends
With the hook enabled, Supabase Auth delegates delivery for actions such as:
- recovery — password reset
- magiclink — passwordless sign-in
- signup — confirm email
- invite, email_change, reauthentication — account lifecycle mail
Your Edge Function maps email_action_type to a subject and builds HTML (link with token_hash for verify URL, optional OTP display). Notify delivers from a from address on a verified Notify domain.
Checklist
- Notify: API key, verified domain, account out of sandbox-only for production
from - Supabase: Edge Functions enabled; secrets
NOTIFY_API_KEY,SEND_EMAIL_HOOK_SECRET, optionalNOTIFY_FROM - Function: verify webhook with Standard Webhooks;
fetchNotify withhtmlbody - Dashboard: Authentication → Hooks → Send Email → HTTPS URL of your function
- Test: trigger reset or signup; confirm in Notify logs
Full code and deploy flags (--no-verify-jwt): Recipe: Supabase Auth → Notify.
Why not Custom SMTP?
| Path | Works with Notify? |
|---|---|
| Supabase Custom SMTP | No — Notify has no SMTP endpoint |
| Send Email Hook → Edge Function → Notify HTTP | Yes |