Checkpoint: Correction de l'erreur "Failed to parse URL" lors de l'envoi d'attestation avec chemin local :

- Modification de la fonction sendAttestationEmail dans server/emailService.ts
- Ajout de la détection automatique entre URL complète (http/https) et chemin local
- Pour les URLs complètes : téléchargement via fetch (comme avant)
- Pour les chemins locaux : lecture directe depuis le système de fichiers avec fs.readFile
- Les fichiers uploadés localement (/uploads/rappels-attachments/...) sont maintenant correctement lus
- Utilisation de path.join(process.cwd(), pdfUrl) pour construire le chemin absolu
- Déployé sur le VPS de production (https://formations.itinova.org)
- L'envoi d'attestations uploadées localement fonctionne maintenant correctement
This commit is contained in:
Manus
2026-01-18 06:11:57 -05:00
parent b7abb929a5
commit ac9ece31a5
2 changed files with 21 additions and 7 deletions

View File

@@ -1144,17 +1144,30 @@ export async function sendAttestationEmail(params: {
<p>Cordialement,<br/>L'équipe Formation</p>
`;
// 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;
}