SMTP di Supabase con Brevo per le email di Auth
Sostituisci il mittente email integrato di Supabase con Brevo SMTP per conferme, magic link, inviti e reimpostazioni della password. Tutto il resto parte dalle Edge Functions tramite l'API di Brevo.

Perché usare Brevo come SMTP di Supabase
Cosa costruisci con Supabase e Brevo
A settembre 2026, oltre 10.000 organizzazioni hanno inviato email tramite Brevo dalle Edge Functions di Supabase.

[auth.email.smtp]
host = "smtp-relay.brevo.com"
port = 587
user = "your-brevo-smtp-login"
pass = "env(BREVO_SMTP_KEY)"
admin_email = "[email protected]"
sender_name = "Your app"
curl --request POST \
--url https://api.brevo.com/v3/smtp/email \
--header "api-key: $BREVO_API_KEY" \
--header "content-type: application/json" \
--data '{
"sender": { "email": "[email protected]" },
"to": [{ "email": "[email protected]" }],
"subject": "Welcome",
"htmlContent": "<p>Thanks for signing up.</p>"
}'
// supabase/functions/send-email/index.ts
const BREVO_URL = 'https://api.brevo.com/v3/smtp/email'
Deno.serve(async (req) => {
const { to, subject, html } = await req.json()
const res = await fetch(BREVO_URL, {
method: 'POST',
headers: {
'api-key': Deno.env.get('BREVO_API_KEY')!,
'content-type': 'application/json',
},
body: JSON.stringify({
sender: { email: '[email protected]' },
to: [{ email: to }],
subject,
htmlContent: html,
}),
})
return new Response(await res.text(), {
status: res.status,
})
})

create extension if not exists pg_net;
create or replace function public.send_welcome()
returns trigger language plpgsql as $$
begin
perform net.http_post(
url := 'https://<project-ref>.supabase.co'
|| '/functions/v1/send-email',
headers := jsonb_build_object(
'Authorization', 'Bearer <your-key>'
),
body := jsonb_build_object(
'to', new.email,
'subject', 'Welcome',
'html', '<p>Thanks for signing up.</p>'
)
);
return new;
end;
$$;
create trigger on_profile_created
after insert on public.profiles
for each row execute function public.send_welcome();


Consegna ogni email di Supabase Auth
Conferme, magic link, codici monouso, inviti e reimpostazioni della password passano dall'SMTP di Brevo verso qualsiasi indirizzo. Come consiglia Supabase, tieni i contenuti promozionali fuori da queste email.
Invia email dalle Edge Functions
Le Edge Functions non possono aprire connessioni in uscita sulle porte 25 e 587: invia quindi con l'API di Brevo, con una POST su /v3/smtp/email e la tua chiave nell'header api-key. Salva la chiave con supabase secrets set e leggila con Deno.env.get. Una risposta 201 restituisce un messageId.
Riporta gli eventi di consegna in Supabase
I webhook transazionali di Brevo segnalano 15 eventi email, tra cui consegnata, aperta, cliccata e hard bounce. Puntane uno verso una Edge Function, disattiva verify_jwt per quella funzione e verifica tu le chiamate. Ogni account può avere fino a 40 webhook.
Invia da un trigger del database
Con l'estensione pg_net, un trigger Postgres chiama la tua Edge Function, che a sua volta chiama l'API di Brevo. pg_net è in beta, invia solo body JSON e avvia le richieste dopo il commit della transazione.
Invia le email di Auth dal tuo dominio
Autentica un dominio di invio in Brevo e crea un mittente per le tue email di Auth. Supabase consiglia un dominio separato per queste email, ad esempio auth.example.com.
Ritrova ogni email di Auth in Brevo
Conferme, magic link e reimpostazioni della password compaiono nei log transazionali di Brevo con i loro eventi di consegna, così puoi verificare cosa è arrivato in casella.