meilleure gestion des templates d'email (allégés)
This commit is contained in:
@@ -57,7 +57,7 @@ function SendEmailsPageContent() {
|
||||
// Initialiser le message par défaut
|
||||
if (campaignData) {
|
||||
setDefaultSubject(`Votez pour la campagne "${campaignData.title}"`);
|
||||
setDefaultMessage(`Bonjour,
|
||||
setDefaultMessage(`Bonjour [PRENOM],
|
||||
|
||||
Vous êtes invité(e) à participer au vote pour la campagne "${campaignData.title}".
|
||||
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
import * as nodemailer from 'nodemailer';
|
||||
import { SmtpSettings } from '@/types';
|
||||
import { settingsService } from '@/lib/services';
|
||||
import { parseFooterMessage } from '@/lib/utils';
|
||||
import { PROJECT_CONFIG } from '@/lib/project.config';
|
||||
|
||||
export async function POST(request: NextRequest) {
|
||||
try {
|
||||
@@ -59,19 +62,44 @@ export async function POST(request: NextRequest) {
|
||||
// Vérifier la connexion
|
||||
await transporter.verify();
|
||||
|
||||
// Récupérer le message du footer depuis les paramètres
|
||||
let footerMessage = '';
|
||||
try {
|
||||
footerMessage = await settingsService.getStringValue(
|
||||
'footer_message',
|
||||
'Développé avec ❤️ pour faciliter la démocratie participative - [Logiciel libre et open source](GITURL)'
|
||||
);
|
||||
} catch (error) {
|
||||
console.warn('Erreur lors de la récupération du message du footer:', error);
|
||||
footerMessage = 'Développé avec ❤️ pour faciliter la démocratie participative - [Logiciel libre et open source](GITURL)';
|
||||
}
|
||||
|
||||
// Traiter le message du footer pour remplacer les liens
|
||||
const { text: processedFooterText, links } = parseFooterMessage(footerMessage, PROJECT_CONFIG.repository.url);
|
||||
|
||||
// Générer le HTML du footer avec les liens cliquables
|
||||
let footerHtml = processedFooterText;
|
||||
if (links.length > 0) {
|
||||
// Remplacer les liens par des balises <a> HTML
|
||||
links.forEach(link => {
|
||||
const linkHtml = `<a href="${link.url}" style="color: #6b7280; text-decoration: underline;" target="_blank" rel="noopener noreferrer">${link.text}</a>`;
|
||||
footerHtml = footerHtml.replace(link.text, linkHtml);
|
||||
});
|
||||
}
|
||||
|
||||
// Traiter le message pour remplacer les placeholders [NOM] et [PRENOM]
|
||||
const firstName = toName.split(' ')[0];
|
||||
const lastName = toName.split(' ').slice(1).join(' ');
|
||||
let personalizedMessage = message
|
||||
.replace(/\[PRENOM\]/g, firstName)
|
||||
.replace(/\[NOM\]/g, lastName);
|
||||
|
||||
// Créer le contenu HTML de l'email
|
||||
const htmlContent = `
|
||||
<div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto; line-height: 1.6;">
|
||||
<div style="background-color: #2563eb; color: white; padding: 20px; text-align: center; border-radius: 8px 8px 0 0;">
|
||||
<h1 style="margin: 0; font-size: 24px;">Mes Budgets Participatifs</h1>
|
||||
</div>
|
||||
|
||||
<div style="background-color: #ffffff; padding: 30px; border: 1px solid #e5e7eb; border-top: none;">
|
||||
<h2 style="color: #1f2937; margin-top: 0;">Bonjour ${toName},</h2>
|
||||
|
||||
<div style="background-color: #f3f4f6; padding: 20px; border-radius: 8px; margin: 20px 0;">
|
||||
<h3 style="margin-top: 0; color: #374151;">Campagne : ${campaignTitle}</h3>
|
||||
<p style="margin-bottom: 0; color: #6b7280;">${message.replace(/\n/g, '<br>')}</p>
|
||||
<div style="background-color: #ffffff; padding: 30px; border: 1px solid #e5e7eb; border-radius: 8px;">
|
||||
<div style="color: #374151; font-size: 16px; margin-bottom: 30px;">
|
||||
${personalizedMessage.replace(/\n/g, '<br>')}
|
||||
</div>
|
||||
|
||||
<div style="text-align: center; margin: 30px 0;">
|
||||
@@ -102,6 +130,10 @@ export async function POST(request: NextRequest) {
|
||||
Cet email a été envoyé automatiquement par Mes Budgets Participatifs.<br>
|
||||
Si vous avez des questions, contactez l'administrateur de la campagne.
|
||||
</p>
|
||||
<hr style="border: none; border-top: 1px solid #e5e7eb; margin: 15px 0;">
|
||||
<p style="color: #9ca3af; font-size: 11px; margin: 0;">
|
||||
${footerHtml}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
Reference in New Issue
Block a user