ajout envoi smtp (paramètres, test envois, envoi à 1 participant). protège vue mot de passe

- ajout filtre page statistiques
This commit is contained in:
Yannick Le Duc
2025-08-25 18:28:14 +02:00
parent caed358661
commit b0a945f07b
21 changed files with 3523 additions and 30 deletions

View File

@@ -0,0 +1,95 @@
import { NextRequest, NextResponse } from 'next/server';
import * as nodemailer from 'nodemailer';
import { SmtpSettings } from '@/types';
export async function POST(request: NextRequest) {
try {
const { smtpSettings } = await request.json();
// Validation des paramètres
if (!smtpSettings) {
return NextResponse.json(
{ success: false, error: 'Paramètres SMTP manquants' },
{ status: 400 }
);
}
// Validation des paramètres SMTP
if (!smtpSettings.host || !smtpSettings.port || !smtpSettings.username || !smtpSettings.password) {
return NextResponse.json(
{ success: false, error: 'Paramètres SMTP incomplets' },
{ status: 400 }
);
}
// Validation du port
if (smtpSettings.port < 1 || smtpSettings.port > 65535) {
return NextResponse.json(
{ success: false, error: 'Port SMTP invalide' },
{ status: 400 }
);
}
// Validation de l'email d'expédition
if (!smtpSettings.from_email.includes('@')) {
return NextResponse.json(
{ success: false, error: 'Adresse email d\'expédition invalide' },
{ status: 400 }
);
}
// Créer le transporteur SMTP avec options de résolution DNS
const transporter = nodemailer.createTransport({
host: smtpSettings.host,
port: smtpSettings.port,
secure: smtpSettings.secure, // true pour 465, false pour les autres ports
auth: {
user: smtpSettings.username,
pass: smtpSettings.password,
},
// Options pour résoudre les problèmes DNS
tls: {
rejectUnauthorized: false, // Accepte les certificats auto-signés
},
// Timeout pour éviter les blocages
connectionTimeout: 10000, // 10 secondes
greetingTimeout: 10000,
socketTimeout: 10000,
});
// Vérifier la connexion
await transporter.verify();
return NextResponse.json({
success: true,
message: 'Connexion SMTP réussie'
});
} catch (error) {
console.error('Erreur lors du test de connexion SMTP:', error);
let errorMessage = 'Erreur de connexion SMTP';
if (error instanceof Error) {
if (error.message.includes('EBADNAME')) {
errorMessage = 'Impossible de résoudre le nom d\'hôte SMTP. Vérifiez que le serveur SMTP est correct.';
} else if (error.message.includes('ECONNREFUSED')) {
errorMessage = 'Connexion refusée. Vérifiez le serveur et le port SMTP.';
} else if (error.message.includes('ETIMEDOUT')) {
errorMessage = 'Délai d\'attente dépassé. Vérifiez votre connexion internet et les paramètres SMTP.';
} else if (error.message.includes('EAUTH')) {
errorMessage = 'Authentification échouée. Vérifiez le nom d\'utilisateur et le mot de passe.';
} else {
errorMessage = error.message;
}
}
return NextResponse.json(
{
success: false,
error: errorMessage
},
{ status: 500 }
);
}
}