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)