Email transactionnel avec Next.js et Resend : le guide complet
Emails de confirmation, réinitialisation de mot de passe, reçus de paiement : les emails transactionnels sont l'épine dorsale de tout SaaS. Avec Resend et son intégration native de React Email, vous envoyez des emails fiables et beaux en moins d'une heure.
Pourquoi Resend ?
- API minimaliste : un seul appel fetch suffit, SDK officiel TypeScript excellent.
- React Email : écrivez vos templates en JSX typé, versionnés dans votre repo.
- Délivrabilité soignée : IPs dédiées, SPF/DKIM guidés pas à pas.
- Tier gratuit généreux : 100 emails/jour, 3 000/mois — largement assez pour démarrer.
Étape 1 : Configuration du domaine
Créez un compte sur resend.com, ajoutez votre domaine, puis ajoutez chez votre registrar les enregistrements demandés :
# Enregistrements DNS typiques
SPF : TXT @ "v=spf1 include:amazonses.com ~all"
DKIM : TXT resend._domainkey "p=MIGfMA0GCSqGSIb3..." (clé fournie)
DMARC : TXT _dmarc "v=DMARC1; p=none; rua=mailto:dmarc@votredomaine.fr"Vérifiez que le statut passe à « Verified » avant tout envoi. Sans DKIM valide, vos emails finiront en spam chez Gmail et Outlook.
Étape 2 : Installation
npm install resend react-email @react-email/components
# .env.local
RESEND_API_KEY=re_xxxxxxxxxxxx
EMAIL_FROM="NeuraAPI <noreply@votredomaine.fr>"Étape 3 : Un template React Email
Les templates en JSX sont testables localement avec npx email dev.
// src/emails/WelcomeEmail.tsx
import { Html, Heading, Text, Button, Section } from '@react-email/components'
export function WelcomeEmail({ name, url }: { name: string; url: string }) {
return (
<Html lang="fr">
<Section style={{ padding: 32, fontFamily: 'sans-serif' }}>
<Heading>Bienvenue {name} 👋</Heading>
<Text>Votre compte est prêt. Confirmez votre adresse pour commencer :</Text>
<Button href={url} style={{ background: '#4f46e5', color: '#fff', padding: '12px 24px', borderRadius: 8 }}>
Confirmer mon email
</Button>
<Text style={{ color: '#888' }}>Ce lien expire dans 24 heures.</Text>
</Section>
</Html>
)
}Étape 4 : Envoyer depuis une route API
// src/app/api/email/welcome/route.ts
import { NextRequest, NextResponse } from 'next/server'
import { Resend } from 'resend'
import { WelcomeEmail } from '@/emails/WelcomeEmail'
const resend = new Resend(process.env.RESEND_API_KEY!)
export async function POST(req: NextRequest) {
const { email, name, confirmUrl } = await req.json()
const { data, error } = await resend.emails.send({
from: process.env.EMAIL_FROM!,
to: email,
subject: 'Confirmez votre compte',
react: WelcomeEmail({ name, url: confirmUrl }),
})
if (error) {
console.error('Resend error:', error)
return NextResponse.json({ error: 'send_failed' }, { status: 500 })
}
return NextResponse.json({ id: data?.id })
}Notez la gestion d'erreur explicite : Resend ne lève pas d'exception, il retourne un objet error. Loggez systématiquement.
Étape 5 : Gérer les bounces avec les webhooks
Pour maintenir votre réputation d'expéditeur, traitez les événementsemail.bounced et email.complained :
// src/app/api/webhooks/resend/route.ts
export async function POST(req: NextRequest) {
const event = await req.json()
switch (event.type) {
case 'email.bounced':
await db.user.update({
where: { email: event.data.to[0] },
data: { emailBlocked: true },
})
break
case 'email.complained':
// Désinscription immédiate obligatoire
await db.newsletter.deleteMany({ where: { email: event.data.to[0] } })
break
}
return NextResponse.json({ received: true })
}Bonnes pratiques délivrabilité
- Un sous-domaine dédié : envoyez depuis mail.votredomaine.fr pour isoler votre réputation du domaine principal.
- Lien de désinscription visible même en transactionnel — c'est une exigence RGPD.
- Jamais d'adresses gratuites en from : noreply@gmail.com est rejeté par beaucoup de FAI.
- Retry asynchrone : mettez les envois critiques dans une file (Vercel Queues, Upstash) plutôt qu'en synchrone dans la requête utilisateur.
- Surveillez vos stats : taux de bounce > 5 % = alerte rouge.
Passez moins de temps sur la plomberie
Nos templates SaaS incluent Resend préconfiguré : emails transactionnels, webhooks et templates React Email prêts à l'emploi. Découvrir les templates
Conclusion
Resend + React Email rendent l'email transactionnel enfin agréable en Next.js : templates typés, API simple, webhooks propres. Configurez vos DNS correctement dès le premier jour, surveillez vos bounces, et vos emails arriveront à destination. Nos templates incluent toute cette infrastructure déjà branchée.