Start here

Arrows to move, enter to open, escape to close.

Ship/Now

Ce qui est branché · 3 min

E-mail

Resend pour votre courrier, Resend en SMTP pour celui de Supabase, et la limite d'offre gratuite qui donne l'impression que tout est cassé.

Il y a deux chemins et on les confond facilement.

Votre courrier passe par l'API Resend depuis src/lib/email.ts : reçus, messages de bienvenue, tout ce que votre application décide d'envoyer.

Le courrier de Supabase, c'est le lien magique et la confirmation. C'est Supabase qui l'envoie, pas vous, donc il faut lui dire de passer par Resend en SMTP.

Votre courrier

import { sendEmail } from "@/lib/email";

await sendEmail({
  to: user.email,
  subject: "C'est prêt",
  html: "<p>Tout est en place.</p>",
});

Les modèles sont de simples fonctions qui renvoient { subject, html }. Pas de moteur de template, pas d'étape de build MJML. Si vous voulez le HTML d'un designer, collez-le.

Le courrier de Supabase

Sous Project settings, Authentication, SMTP :

Host      smtp.resend.com
Port      465
User      resend
Password  votre clé d'API Resend
Sender    la même adresse que EMAIL_FROM

Réécrivez ensuite les trois modèles comme décrit dans Authentification. Les modèles par défaut ne connecteront personne.

La délivrabilité

Trois enregistrements DNS décident si votre courrier arrive ou part en indésirable. Resend vous donne les trois quand vous ajoutez un domaine :

TypeHôteRôle
TXTresend._domainkeyDKIM. Prouve que le message n'a pas été altéré
MXsendOù vont les rebonds
TXTsendSPF. Autorise Amazon SES à envoyer pour vous

Ils sont sur un sous-domaine send, donc ils n'entrent pas en conflit avec une redirection de courrier existante sur votre apex.

Changer de fournisseur

src/lib/email.ts fait une quarantaine de lignes et exporte une fonction. Postmark, SES et Loops prennent la même forme. Changez ce fichier ; rien d'autre n'importe le SDK.

Une erreur ou un manque sur cette page ? Dites-le-nous.