diff --git a/server/emailService.ts b/server/emailService.ts
index 4340629..815c53d 100644
--- a/server/emailService.ts
+++ b/server/emailService.ts
@@ -1144,17 +1144,30 @@ export async function sendAttestationEmail(params: {
Cordialement,
L'équipe Formation
`;
- // Télécharger le PDF depuis l'URL
+ // Récupérer le PDF (depuis URL ou chemin local)
let pdfBuffer: Buffer;
try {
- const response = await fetch(params.pdfUrl);
- if (!response.ok) {
- throw new Error(`Failed to download PDF: ${response.statusText}`);
+ // Vérifier si c'est un chemin local ou une URL complète
+ if (params.pdfUrl.startsWith('http://') || params.pdfUrl.startsWith('https://')) {
+ // Télécharger depuis l'URL
+ const response = await fetch(params.pdfUrl);
+ if (!response.ok) {
+ throw new Error(`Failed to download PDF: ${response.statusText}`);
+ }
+ const arrayBuffer = await response.arrayBuffer();
+ pdfBuffer = Buffer.from(arrayBuffer);
+ } else {
+ // Lire depuis le système de fichiers local
+ const fs = await import('fs/promises');
+ const path = await import('path');
+
+ // Construire le chemin absolu (le chemin commence par /uploads/...)
+ // Sur le VPS, les fichiers sont dans /var/www/formation-manager-itinova/uploads/
+ const absolutePath = path.join(process.cwd(), params.pdfUrl);
+ pdfBuffer = await fs.readFile(absolutePath);
}
- const arrayBuffer = await response.arrayBuffer();
- pdfBuffer = Buffer.from(arrayBuffer);
} catch (error) {
- console.error('[sendAttestationEmail] Error downloading PDF:', error);
+ console.error('[sendAttestationEmail] Error loading PDF:', error);
throw error;
}
diff --git a/todo.md b/todo.md
index b680e4a..e658d59 100644
--- a/todo.md
+++ b/todo.md
@@ -862,3 +862,4 @@
- [x] Corriger l'erreur "aucune attestation disponible pour cet apprenant" lors de l'envoi manuel d'une attestation uploadée (vérification de documentUrl ou urlPdf)
- [x] Modifier l'envoi d'attestation pour joindre le PDF directement en pièce jointe au lieu d'un lien de téléchargement
- [x] Permettre le renvoi d'une attestation même après qu'elle ait été envoyée (afficher bouton Renvoyer au lieu de masquer Envoyer)
+- [x] Corriger l'erreur "Failed to parse URL" lors de l'envoi d'attestation avec un chemin local (gérer les chemins locaux et URLs complètes)