SMTP Supabase avec Brevo pour les emails Auth
Remplacez l’expéditeur d’email intégré de Supabase par Brevo SMTP pour les confirmations, magic links, invitations et réinitialisations de mot de passe. Envoyez le reste depuis des Edge Functions avec l’API Brevo.

Pourquoi choisir Brevo comme SMTP Supabase
Ce que vous construisez avec Supabase et Brevo
En septembre 2026, plus de 10 000 organisations ont envoyé des emails via Brevo depuis des Edge Functions 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();


Délivrez chaque email Supabase Auth
Confirmations, liens magiques, codes à usage unique, invitations et réinitialisations de mot de passe passent par le SMTP Brevo, vers n'importe quelle adresse. Comme le recommande Supabase, gardez tout contenu promotionnel hors de ces emails.
Envoyez depuis vos Edge Functions
Les Edge Functions ne peuvent pas ouvrir de connexion sortante sur les ports 25 et 587 : passez par l'API Brevo, avec un POST sur /v3/smtp/email et votre clé dans l'en-tête api-key. Stockez la clé avec supabase secrets set et lisez-la avec Deno.env.get. Une réponse 201 renvoie un messageId.
Récupérez les événements dans Supabase
Les webhooks transactionnels de Brevo remontent 15 événements email, dont délivré, ouvert, cliqué et hard bounce. Dirigez-en un vers une Edge Function, désactivez verify_jwt pour elle et vérifiez les appels vous-même. Un compte accepte jusqu'à 40 webhooks.
Envoyez depuis un trigger de base de données
Avec l'extension pg_net, un trigger Postgres appelle votre Edge Function, qui appelle ensuite l'API Brevo. pg_net est en bêta, n'envoie que des corps JSON et lance les requêtes après le commit de la transaction.
Envoyez les emails Auth depuis votre propre domaine
Authentifiez un domaine d'envoi dans Brevo et créez un expéditeur pour vos emails Auth. Supabase recommande un domaine distinct pour ces emails, par exemple auth.example.com.
Retrouvez chaque email Auth dans Brevo
Confirmations, magic links et réinitialisations de mot de passe apparaissent dans les logs transactionnels de Brevo avec leurs événements de livraison, pour vérifier ce qui est arrivé en boîte de réception.