Supabase SMTP mit Brevo für Auth-E-Mails
Ersetze den integrierten E-Mail-Versand von Supabase durch Brevo SMTP für Bestätigungen, Magic Links, Einladungen und Passwort-Resets. Alles Weitere sendest du aus Edge Functions über die Brevo API.

Warum Brevo als Supabase SMTP
Was du mit Supabase und Brevo baust
Im September 2026 haben mehr als 10.000 Organisationen E-Mails über Brevo aus Supabase Edge Functions versendet.

[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();


Jede Supabase Auth-E-Mail zustellen
Bestätigungen, Magic Links, Einmalpasswörter, Einladungen und Passwort-Resets laufen über Brevo SMTP an jede Adresse. Halte Werbung aus diesen E-Mails heraus, so wie Supabase es empfiehlt.
E-Mails aus Edge Functions versenden
Edge Functions können keine ausgehenden Verbindungen über die Ports 25 und 587 öffnen. Versende deshalb über die Brevo API: ein POST auf /v3/smtp/email, mit deinem Schlüssel im Header api-key. Speichere den Schlüssel mit supabase secrets set und lies ihn mit Deno.env.get aus. Eine Antwort mit Status 201 liefert eine messageId.
Zustellereignisse zurück nach Supabase holen
Die transaktionalen Webhooks von Brevo melden 15 E-Mail-Ereignisse, darunter zugestellt, geöffnet, geklickt und Hard Bounce. Richte einen davon auf eine Edge Function, schalte verify_jwt für sie ab und prüfe die Aufrufe selbst. Pro Konto sind bis zu 40 Webhooks möglich.
Aus einem Datenbank-Trigger versenden
Mit der Erweiterung pg_net ruft ein Postgres-Trigger deine Edge Function auf, und die ruft die Brevo API auf. pg_net ist in der Beta, sendet nur JSON-Bodys und startet Anfragen erst nach dem Commit der Transaktion.
Sende Auth-E-Mails von deiner eigenen Domain
Authentifiziere eine Absenderdomain in Brevo und lege einen Absender für deine Auth-E-Mails an. Supabase empfiehlt dafür eine eigene Domain, zum Beispiel auth.example.com.
Jede Auth-E-Mail in Brevo sehen
Bestätigungen, Magic Links und Passwort-Resets erscheinen mit ihren Zustellereignissen in den Transaktions-Logs von Brevo, damit du prüfen kannst, was im Postfach angekommen ist.