Checkpoint: Version finale avec support SMTP complet :
Fonctionnalités ajoutées : - Support SMTP Direct pour l'envoi d'emails (Gmail, Outlook, serveurs personnalisés) - Interface de configuration SMTP dans l'administration - Basculement automatique entre Resend API et SMTP Direct - Affichage du statut de configuration (Resend/SMTP, Simulation/Production) Corrections apportées : - Correction du bug de décalage horaire dans le formulaire d'édition des séquences - Ajout du menu de navigation sur la page Import Excel - Déplacement du menu Import Excel vers le bloc Configuration - Correction de la fonction upsertEmailConfig pour mettre à jour au lieu de créer des doublons - Correction du bug d'enregistrement des champs SMTP dans la base de données - Correction du problème de cache React Query qui gardait l'ancienne configuration - Invalidation automatique du cache après enregistrement de la configuration Scripts de déploiement : - Scripts de mise à jour VPS avec sauvegarde automatique - Package de déploiement prêt pour le serveur de production
This commit is contained in:
112
test-smtp.mjs
Normal file
112
test-smtp.mjs
Normal file
@@ -0,0 +1,112 @@
|
||||
import { drizzle } from "drizzle-orm/mysql2";
|
||||
import { eq } from "drizzle-orm";
|
||||
import { emailConfig } from "./drizzle/schema.js";
|
||||
import nodemailer from "nodemailer";
|
||||
|
||||
// Connexion à la base de données
|
||||
const db = drizzle(process.env.DATABASE_URL);
|
||||
|
||||
// Récupérer la configuration SMTP
|
||||
const config = await db
|
||||
.select()
|
||||
.from(emailConfig)
|
||||
.where(eq(emailConfig.active, true))
|
||||
.limit(1);
|
||||
|
||||
if (config.length === 0) {
|
||||
console.error("❌ Aucune configuration email active trouvée");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const emailConf = config[0];
|
||||
|
||||
console.log("📧 Configuration SMTP trouvée:");
|
||||
console.log(" Provider:", emailConf.provider);
|
||||
console.log(" Mode:", emailConf.mode);
|
||||
console.log(" SMTP Host:", emailConf.smtpHost);
|
||||
console.log(" SMTP Port:", emailConf.smtpPort);
|
||||
console.log(" SMTP Secure:", emailConf.smtpSecure);
|
||||
console.log(" SMTP User:", emailConf.smtpUser);
|
||||
console.log(" From Email:", emailConf.fromEmail);
|
||||
console.log(" From Name:", emailConf.fromName);
|
||||
console.log("");
|
||||
|
||||
if (emailConf.provider !== "smtp") {
|
||||
console.error("❌ Le provider n'est pas 'smtp' mais:", emailConf.provider);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if (!emailConf.smtpHost || !emailConf.smtpPort || !emailConf.smtpUser || !emailConf.smtpPassword) {
|
||||
console.error("❌ Configuration SMTP incomplète");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
console.log("🔧 Création du transporteur SMTP...");
|
||||
|
||||
const transporterConfig = {
|
||||
host: emailConf.smtpHost,
|
||||
port: emailConf.smtpPort,
|
||||
secure: emailConf.smtpSecure === "ssl",
|
||||
auth: {
|
||||
user: emailConf.smtpUser,
|
||||
pass: emailConf.smtpPassword,
|
||||
},
|
||||
tls: {
|
||||
rejectUnauthorized: false,
|
||||
},
|
||||
};
|
||||
|
||||
if (emailConf.smtpSecure === "tls") {
|
||||
transporterConfig.requireTLS = true;
|
||||
}
|
||||
|
||||
console.log(" Config:", JSON.stringify({
|
||||
...transporterConfig,
|
||||
auth: { user: transporterConfig.auth.user, pass: "***" }
|
||||
}, null, 2));
|
||||
|
||||
const transporter = nodemailer.createTransport(transporterConfig);
|
||||
|
||||
console.log("");
|
||||
console.log("🔍 Test de connexion SMTP...");
|
||||
|
||||
try {
|
||||
await transporter.verify();
|
||||
console.log("✅ Connexion SMTP réussie !");
|
||||
} catch (error) {
|
||||
console.error("❌ Erreur de connexion SMTP:", error.message);
|
||||
console.error("Détails:", error);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
console.log("");
|
||||
console.log("📨 Envoi d'un email de test...");
|
||||
|
||||
const testEmail = process.argv[2] || "test@example.com";
|
||||
|
||||
try {
|
||||
const info = await transporter.sendMail({
|
||||
from: `"${emailConf.fromName}" <${emailConf.fromEmail}>`,
|
||||
to: testEmail,
|
||||
subject: "Test SMTP - Formation Manager Itinova",
|
||||
html: `
|
||||
<h1>✅ Test réussi !</h1>
|
||||
<p>Cet email de test a été envoyé avec succès depuis votre configuration SMTP.</p>
|
||||
<p>Votre configuration d'envoi d'emails fonctionne correctement.</p>
|
||||
<hr>
|
||||
<p><small>Configuration: ${emailConf.smtpHost}:${emailConf.smtpPort} (${emailConf.smtpSecure})</small></p>
|
||||
`,
|
||||
});
|
||||
|
||||
console.log("✅ Email envoyé avec succès !");
|
||||
console.log(" Message ID:", info.messageId);
|
||||
console.log(" Response:", info.response);
|
||||
} catch (error) {
|
||||
console.error("❌ Erreur lors de l'envoi:", error.message);
|
||||
console.error("Détails:", error);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
console.log("");
|
||||
console.log("🎉 Test terminé avec succès !");
|
||||
process.exit(0);
|
||||
Reference in New Issue
Block a user