Checkpoint: Ajout d'une interface d'administration complète pour personnaliser les templates d'emails avec prévisualisation en temps réel, stockage en base de données et intégration avec le service d'envoi
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
|
||||
import { generateFormationICS } from "./icsGenerator";
|
||||
import { sendEmail as sendEmailViaService, isEmailServiceConfigured } from "./_core/emailSender";
|
||||
import { generateEmailFromTemplate } from "./emailTemplateGenerator";
|
||||
|
||||
interface EmailParams {
|
||||
to: string;
|
||||
@@ -26,41 +27,10 @@ async function sendEmail(params: EmailParams): Promise<boolean> {
|
||||
}
|
||||
|
||||
/**
|
||||
* Template HTML de base pour les emails
|
||||
* Template HTML de base pour les emails (avec template personnalisé)
|
||||
*/
|
||||
function getEmailTemplate(content: string): string {
|
||||
return `
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<style>
|
||||
body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
|
||||
.container { max-width: 600px; margin: 0 auto; padding: 20px; }
|
||||
.header { background-color: #2563eb; color: white; padding: 20px; text-align: center; }
|
||||
.content { background-color: #f9fafb; padding: 30px; }
|
||||
.footer { background-color: #f3f4f6; padding: 20px; text-align: center; font-size: 12px; color: #6b7280; }
|
||||
.button { display: inline-block; padding: 12px 24px; background-color: #2563eb; color: white; text-decoration: none; border-radius: 6px; margin: 10px 0; }
|
||||
.info-box { background-color: #dbeafe; border-left: 4px solid #2563eb; padding: 15px; margin: 15px 0; }
|
||||
.date-item { margin: 10px 0; padding: 10px; background-color: white; border-radius: 4px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<h1>Formation Manager Itinova</h1>
|
||||
</div>
|
||||
<div class="content">
|
||||
${content}
|
||||
</div>
|
||||
<div class="footer">
|
||||
<p>Cet email a été envoyé automatiquement par le système de gestion des formations Itinova.</p>
|
||||
<p>Pour toute question, veuillez contacter le service RH.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
`.trim();
|
||||
async function getEmailTemplate(content: string, templateType: string = 'inscription'): Promise<string> {
|
||||
return await generateEmailFromTemplate(templateType, content);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -152,7 +122,7 @@ export async function sendInscriptionConfirmation(params: {
|
||||
subject: isConfirmed
|
||||
? `Confirmation d'inscription - ${params.formationNom}`
|
||||
: `Liste d'attente - ${params.formationNom}`,
|
||||
html: getEmailTemplate(content),
|
||||
html: await getEmailTemplate(content, 'inscription'),
|
||||
attachments,
|
||||
});
|
||||
}
|
||||
@@ -204,7 +174,7 @@ export async function sendTeaserEmail(params: {
|
||||
return sendEmail({
|
||||
to: params.apprenantEmail,
|
||||
subject: `Votre formation ${params.formationNom} approche !`,
|
||||
html: getEmailTemplate(content),
|
||||
html: await getEmailTemplate(content, 'teaser'),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -263,7 +233,7 @@ export async function sendRappelJ7Email(params: {
|
||||
return sendEmail({
|
||||
to: params.apprenantEmail,
|
||||
subject: `Rappel J-7 : ${params.formationNom}`,
|
||||
html: getEmailTemplate(content),
|
||||
html: await getEmailTemplate(content, 'rappel'),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -356,6 +326,6 @@ export async function sendPasswordResetEmail(params: {
|
||||
return sendEmail({
|
||||
to: params.apprenantEmail,
|
||||
subject: 'Réinitialisation de votre mot de passe - Manager Itinova',
|
||||
html: getEmailTemplate(content),
|
||||
html: await getEmailTemplate(content, 'reset_password'),
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user