Checkpoint: Corrections complètes du système de pièces jointes pour les rappels :
- Upload de fichiers avec fallback automatique vers stockage local - Configuration Nginx pour uploads jusqu'à 10 Mo - Colonne "Pièce jointe" dans le tableau de gestion des rappels - Support des fichiers locaux et S3 dans l'envoi d'emails - Correction de l'encoding base64 pour SMTP/Nodemailer - Table logsrappels créée dans la base de données MySQL du VPS
This commit is contained in:
@@ -291,10 +291,22 @@ export async function sendRappelEmail(params: {
|
||||
|
||||
if (params.attachmentUrl && params.attachmentFilename && params.attachmentMimeType) {
|
||||
try {
|
||||
// Télécharger le fichier depuis S3 et le convertir en base64
|
||||
const response = await fetch(params.attachmentUrl);
|
||||
const buffer = await response.arrayBuffer();
|
||||
const base64 = Buffer.from(buffer).toString('base64');
|
||||
let base64: string;
|
||||
|
||||
// Vérifier si c'est une URL locale (commence par /uploads/)
|
||||
if (params.attachmentUrl.startsWith('/uploads/')) {
|
||||
// Lire le fichier depuis le système de fichiers
|
||||
const fs = await import('fs/promises');
|
||||
const path = await import('path');
|
||||
const filePath = path.join(process.cwd(), params.attachmentUrl);
|
||||
const fileBuffer = await fs.readFile(filePath);
|
||||
base64 = fileBuffer.toString('base64');
|
||||
} else {
|
||||
// Télécharger le fichier depuis une URL externe (S3)
|
||||
const response = await fetch(params.attachmentUrl);
|
||||
const arrayBuffer = await response.arrayBuffer();
|
||||
base64 = Buffer.from(arrayBuffer).toString('base64');
|
||||
}
|
||||
|
||||
attachments.push({
|
||||
filename: params.attachmentFilename,
|
||||
@@ -302,7 +314,7 @@ export async function sendRappelEmail(params: {
|
||||
contentType: params.attachmentMimeType,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('[Email] Erreur lors du téléchargement de la pièce jointe:', error);
|
||||
console.error('[Email] Erreur lors du chargement de la pièce jointe:', error);
|
||||
// Continuer l'envoi sans la pièce jointe
|
||||
}
|
||||
}
|
||||
@@ -389,10 +401,22 @@ export async function sendRappelJ7Email(params: {
|
||||
|
||||
if (params.attachmentUrl && params.attachmentFilename && params.attachmentMimeType) {
|
||||
try {
|
||||
// Télécharger le fichier depuis S3 et le convertir en base64
|
||||
const response = await fetch(params.attachmentUrl);
|
||||
const buffer = await response.arrayBuffer();
|
||||
const base64 = Buffer.from(buffer).toString('base64');
|
||||
let base64: string;
|
||||
|
||||
// Vérifier si c'est une URL locale (commence par /uploads/)
|
||||
if (params.attachmentUrl.startsWith('/uploads/')) {
|
||||
// Lire le fichier depuis le système de fichiers
|
||||
const fs = await import('fs/promises');
|
||||
const path = await import('path');
|
||||
const filePath = path.join(process.cwd(), params.attachmentUrl);
|
||||
const fileBuffer = await fs.readFile(filePath);
|
||||
base64 = fileBuffer.toString('base64');
|
||||
} else {
|
||||
// Télécharger le fichier depuis une URL externe (S3)
|
||||
const response = await fetch(params.attachmentUrl);
|
||||
const arrayBuffer = await response.arrayBuffer();
|
||||
base64 = Buffer.from(arrayBuffer).toString('base64');
|
||||
}
|
||||
|
||||
attachments.push({
|
||||
filename: params.attachmentFilename,
|
||||
@@ -400,7 +424,7 @@ export async function sendRappelJ7Email(params: {
|
||||
contentType: params.attachmentMimeType,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('[Email] Erreur lors du téléchargement de la pièce jointe:', error);
|
||||
console.error('[Email] Erreur lors du chargement de la pièce jointe:', error);
|
||||
// Continuer l'envoi sans la pièce jointe
|
||||
}
|
||||
}
|
||||
@@ -490,10 +514,22 @@ export async function sendRappelJ1Email(params: {
|
||||
|
||||
if (params.attachmentUrl && params.attachmentFilename && params.attachmentMimeType) {
|
||||
try {
|
||||
// Télécharger le fichier depuis S3 et le convertir en base64
|
||||
const response = await fetch(params.attachmentUrl);
|
||||
const buffer = await response.arrayBuffer();
|
||||
const base64 = Buffer.from(buffer).toString('base64');
|
||||
let base64: string;
|
||||
|
||||
// Vérifier si c'est une URL locale (commence par /uploads/)
|
||||
if (params.attachmentUrl.startsWith('/uploads/')) {
|
||||
// Lire le fichier depuis le système de fichiers
|
||||
const fs = await import('fs/promises');
|
||||
const path = await import('path');
|
||||
const filePath = path.join(process.cwd(), params.attachmentUrl);
|
||||
const fileBuffer = await fs.readFile(filePath);
|
||||
base64 = fileBuffer.toString('base64');
|
||||
} else {
|
||||
// Télécharger le fichier depuis une URL externe (S3)
|
||||
const response = await fetch(params.attachmentUrl);
|
||||
const arrayBuffer = await response.arrayBuffer();
|
||||
base64 = Buffer.from(arrayBuffer).toString('base64');
|
||||
}
|
||||
|
||||
attachments.push({
|
||||
filename: params.attachmentFilename,
|
||||
@@ -501,7 +537,7 @@ export async function sendRappelJ1Email(params: {
|
||||
contentType: params.attachmentMimeType,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('[Email] Erreur lors du téléchargement de la pièce jointe:', error);
|
||||
console.error('[Email] Erreur lors du chargement de la pièce jointe:', error);
|
||||
// Continuer l'envoi sans la pièce jointe
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user