/** * Script de debug pour tester le flux complet d'envoi d'email * * Ce script teste: * 1. Connexion SMTP * 2. Envoi d'un email simple * 3. Envoi avec le template complet */ require('dotenv').config(); const nodemailer = require('nodemailer'); console.log('\n🔍 DEBUG - Flux d\'envoi d\'email transporteur\n'); console.log('='.repeat(60)); // 1. Afficher la configuration console.log('\n📋 CONFIGURATION ACTUELLE:'); console.log('----------------------------'); console.log('SMTP_HOST:', process.env.SMTP_HOST); console.log('SMTP_PORT:', process.env.SMTP_PORT); console.log('SMTP_SECURE:', process.env.SMTP_SECURE); console.log('SMTP_USER:', process.env.SMTP_USER); console.log('SMTP_PASS:', process.env.SMTP_PASS ? '***' + process.env.SMTP_PASS.slice(-4) : 'NON DÉFINI'); console.log('SMTP_FROM:', process.env.SMTP_FROM); console.log('APP_URL:', process.env.APP_URL); // 2. Vérifier les variables requises console.log('\n✅ VÉRIFICATION DES VARIABLES:'); console.log('--------------------------------'); const requiredVars = ['SMTP_HOST', 'SMTP_PORT', 'SMTP_USER', 'SMTP_PASS']; const missing = requiredVars.filter(v => !process.env[v]); if (missing.length > 0) { console.error('❌ Variables manquantes:', missing.join(', ')); process.exit(1); } else { console.log('✅ Toutes les variables requises sont présentes'); } // 3. Créer le transporter avec la même configuration que le backend console.log('\n🔧 CRÉATION DU TRANSPORTER:'); console.log('----------------------------'); const host = process.env.SMTP_HOST; const port = parseInt(process.env.SMTP_PORT); const user = process.env.SMTP_USER; const pass = process.env.SMTP_PASS; const secure = process.env.SMTP_SECURE === 'true'; // Même logique que dans email.adapter.ts const useDirectIP = host.includes('mailtrap.io'); const actualHost = useDirectIP ? '3.209.246.195' : host; const serverName = useDirectIP ? 'smtp.mailtrap.io' : host; console.log('Configuration détectée:'); console.log(' Host original:', host); console.log(' Utilise IP directe:', useDirectIP); console.log(' Host réel:', actualHost); console.log(' Server name (TLS):', serverName); console.log(' Port:', port); console.log(' Secure:', secure); const transporter = nodemailer.createTransport({ host: actualHost, port, secure, auth: { user, pass, }, tls: { rejectUnauthorized: false, servername: serverName, }, connectionTimeout: 10000, greetingTimeout: 10000, socketTimeout: 30000, dnsTimeout: 10000, }); // 4. Tester la connexion console.log('\n🔌 TEST DE CONNEXION SMTP:'); console.log('---------------------------'); async function testConnection() { try { console.log('Vérification de la connexion...'); await transporter.verify(); console.log('✅ Connexion SMTP réussie!'); return true; } catch (error) { console.error('❌ Échec de la connexion SMTP:'); console.error(' Message:', error.message); console.error(' Code:', error.code); console.error(' Command:', error.command); if (error.stack) { console.error(' Stack:', error.stack.substring(0, 200) + '...'); } return false; } } // 5. Envoyer un email de test simple async function sendSimpleEmail() { console.log('\n📧 TEST 1: Email simple'); console.log('------------------------'); try { const info = await transporter.sendMail({ from: process.env.SMTP_FROM || 'noreply@xpeditis.com', to: 'test@example.com', subject: 'Test Simple - ' + new Date().toISOString(), text: 'Ceci est un test simple', html: '
Ceci est un test simple
', }); console.log('✅ Email simple envoyé avec succès!'); console.log(' Message ID:', info.messageId); console.log(' Response:', info.response); console.log(' Accepted:', info.accepted); console.log(' Rejected:', info.rejected); return true; } catch (error) { console.error('❌ Échec d\'envoi email simple:'); console.error(' Message:', error.message); console.error(' Code:', error.code); return false; } } // 6. Envoyer un email avec le template transporteur complet async function sendCarrierEmail() { console.log('\n📧 TEST 2: Email transporteur avec template'); console.log('--------------------------------------------'); const bookingData = { bookingId: 'TEST-' + Date.now(), origin: 'FRPAR', destination: 'USNYC', volumeCBM: 15.5, weightKG: 1200, palletCount: 6, priceUSD: 2500, priceEUR: 2250, primaryCurrency: 'USD', transitDays: 18, containerType: '40FT', documents: [ { type: 'Bill of Lading', fileName: 'bol-test.pdf' }, { type: 'Packing List', fileName: 'packing-test.pdf' }, { type: 'Commercial Invoice', fileName: 'invoice-test.pdf' }, ], }; const baseUrl = process.env.APP_URL || 'http://localhost:3000'; const acceptUrl = `${baseUrl}/api/v1/csv-bookings/${bookingData.bookingId}/accept`; const rejectUrl = `${baseUrl}/api/v1/csv-bookings/${bookingData.bookingId}/reject`; // Template HTML (version simplifiée pour le test) const htmlTemplate = `