/** * Script de test pour vérifier l'envoi d'email aux transporteurs * * Usage: node test-carrier-email-fix.js */ const nodemailer = require('nodemailer'); async function testEmailConfig() { console.log('🔍 Test de configuration email Mailtrap...\n'); const config = { host: process.env.SMTP_HOST || 'sandbox.smtp.mailtrap.io', port: parseInt(process.env.SMTP_PORT || '2525'), user: process.env.SMTP_USER || '2597bd31d265eb', pass: process.env.SMTP_PASS || 'cd126234193c89', }; console.log('📧 Configuration SMTP:'); console.log(` Host: ${config.host}`); console.log(` Port: ${config.port}`); console.log(` User: ${config.user}`); console.log(` Pass: ${config.pass.substring(0, 4)}***\n`); // Test 1: Configuration standard (peut échouer avec timeout DNS) console.log('Test 1: Configuration standard...'); try { const transporter1 = nodemailer.createTransport({ host: config.host, port: config.port, secure: false, auth: { user: config.user, pass: config.pass, }, connectionTimeout: 10000, greetingTimeout: 10000, socketTimeout: 30000, }); await transporter1.sendMail({ from: 'noreply@xpeditis.com', to: 'test@xpeditis.com', subject: 'Test Email - Configuration Standard', html: '
Configuration standard fonctionne.
', }); console.log('✅ Test 1 RÉUSSI - Configuration standard OK\n'); } catch (error) { console.error('❌ Test 1 ÉCHOUÉ:', error.message); console.error(' Code:', error.code); console.error(' Timeout?', error.message.includes('ETIMEOUT')); console.log(''); } // Test 2: Configuration avec IP directe (devrait toujours fonctionner) console.log('Test 2: Configuration avec IP directe...'); try { const useDirectIP = config.host.includes('mailtrap.io'); const actualHost = useDirectIP ? '3.209.246.195' : config.host; const serverName = useDirectIP ? 'smtp.mailtrap.io' : config.host; console.log(` Utilisation IP directe: ${useDirectIP}`); console.log(` Host réel: ${actualHost}`); console.log(` Server name (TLS): ${serverName}`); const transporter2 = nodemailer.createTransport({ host: actualHost, port: config.port, secure: false, auth: { user: config.user, pass: config.pass, }, tls: { rejectUnauthorized: false, servername: serverName, }, connectionTimeout: 10000, greetingTimeout: 10000, socketTimeout: 30000, dnsTimeout: 10000, }); const result = await transporter2.sendMail({ from: 'noreply@xpeditis.com', to: 'test@xpeditis.com', subject: 'Test Email - Configuration IP Directe', html: 'Configuration avec IP directe fonctionne.
', }); console.log('✅ Test 2 RÉUSSI - Configuration IP directe OK'); console.log(` Message ID: ${result.messageId}`); console.log(` Response: ${result.response}\n`); } catch (error) { console.error('❌ Test 2 ÉCHOUÉ:', error.message); console.error(' Code:', error.code); console.log(''); } // Test 3: Template HTML de booking transporteur console.log('Test 3: Envoi avec template HTML complet...'); try { const useDirectIP = config.host.includes('mailtrap.io'); const actualHost = useDirectIP ? '3.209.246.195' : config.host; const serverName = useDirectIP ? 'smtp.mailtrap.io' : config.host; const transporter3 = nodemailer.createTransport({ host: actualHost, port: config.port, secure: false, auth: { user: config.user, pass: config.pass, }, tls: { rejectUnauthorized: false, servername: serverName, }, connectionTimeout: 10000, greetingTimeout: 10000, socketTimeout: 30000, dnsTimeout: 10000, }); const bookingData = { bookingId: 'TEST-' + Date.now(), origin: 'FRPAR', destination: 'USNYC', volumeCBM: 10.5, weightKG: 850, palletCount: 4, priceUSD: 1500, priceEUR: 1350, primaryCurrency: 'USD', transitDays: 15, containerType: '20FT', documents: [ { type: 'Bill of Lading', fileName: 'bol.pdf' }, { type: 'Packing List', fileName: 'packing_list.pdf' }, ], acceptUrl: 'http://localhost:3000/carrier/booking/accept', rejectUrl: 'http://localhost:3000/carrier/booking/reject', }; const htmlTemplate = ` `; const result = await transporter3.sendMail({ from: 'noreply@xpeditis.com', to: 'carrier@test.com', subject: `Nouvelle demande de réservation - ${bookingData.origin} → ${bookingData.destination}`, html: htmlTemplate, }); console.log('✅ Test 3 RÉUSSI - Email complet avec template envoyé'); console.log(` Message ID: ${result.messageId}`); console.log(` Response: ${result.response}\n`); } catch (error) { console.error('❌ Test 3 ÉCHOUÉ:', error.message); console.error(' Code:', error.code); console.log(''); } console.log('📊 Résumé des tests:'); console.log(' ✓ Vérifiez Mailtrap inbox: https://mailtrap.io/inboxes'); console.log(' ✓ Recherchez les emails de test ci-dessus'); console.log(' ✓ Si Test 2 et 3 réussissent, le backend doit être corrigé avec la configuration IP directe\n'); } // Run test testEmailConfig() .then(() => { console.log('✅ Tests terminés avec succès'); process.exit(0); }) .catch((error) => { console.error('❌ Erreur lors des tests:', error); process.exit(1); });