← Retour à la marketplaceVoir les projets →
📧
Emails Transactionnels
Envoi d'emails avec templates HTML, variables dynamiques et historique.
CommunicationSimple~3 joursv1.1.0
Module d'emails transactionnels avec templates HTML réutilisables, variables dynamiques, historique des envois, gestion des rebonds et intégration SMTP ou Resend/SendGrid.
emailsmtptemplatestransactionalresend
📋 Schéma Prisma
// === Module Emails ===
enum EmailStatus {
PENDING
SENT
FAILED
BOUNCED
}
model EmailTemplate {
id String @id @default(cuid())
slug String @unique
name String
subject String
htmlBody String
variables String[] // ex: ["name", "link"]
isActive Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("email_templates")
}
model EmailLog {
id String @id @default(cuid())
templateId String?
toEmail String
subject String
status EmailStatus @default(PENDING)
error String?
sentAt DateTime?
createdAt DateTime @default(now())
@@map("email_logs")
}🔌 Endpoints API
## API Emails
GET /api/email-templates # Liste des templates
POST /api/email-templates # Créer
PUT /api/email-templates/:slug # Modifier
POST /api/email-templates/:slug/test # Envoyer un email de test
GET /api/email-logs # Historique des envois
# Service interne : import { sendEmail } from "@/lib/email/service"🛠️ Guide d'implémentation
## Implémentation Emails
### Dépendances (choisir un)
```bash
npm install resend # Recommandé (simple, moderne)
# ou
npm install nodemailer @types/nodemailer # SMTP classique
```
### Étape 1 — Service email
Créer src/lib/email/service.ts :
```typescript
async function sendEmail({ to, templateSlug, variables }: SendEmailParams)
```
- Charger le template depuis la DB
- Remplacer les variables (handlebars-style)
- Envoyer via Resend/SMTP
- Logger dans EmailLog
### Étape 2 — Templates de base
Créer les templates : welcome, reset-password, notification, invoice
### Variables d'environnement
```
EMAIL_FROM=noreply@monapp.fr
RESEND_API_KEY=re_xxx # ou SMTP_HOST/PORT/USER/PASS
```Prêt à installer ce module ?
Ajoutez-le à un projet existant depuis la page modules du projet.