diff --git a/backend/src/routes/adminEmail.js b/backend/src/routes/adminEmail.js index 7fe7ed7..fcfcd84 100644 --- a/backend/src/routes/adminEmail.js +++ b/backend/src/routes/adminEmail.js @@ -112,17 +112,44 @@ router.post('/test', adminAuth, async (req, res) => { return res.status(400).json({ error: 'Email configuration not found. Please configure SMTP settings first.' }); } - // Create transporter - const transporter = nodemailer.createTransport({ + // Validate SMTP configuration + if (!config.smtp_host || !config.smtp_port) { + return res.status(400).json({ + error: 'Incomplete email configuration', + details: 'SMTP host and port are required' + }); + } + + // Check if password might be masked (this shouldn't happen when fetching from DB) + if (config.smtp_pass === '********') { + return res.status(400).json({ + error: 'Invalid email configuration', + details: 'SMTP password appears to be masked. Please reconfigure your email settings.' + }); + } + + // Create transporter with detailed logging + const transportConfig = { host: config.smtp_host, - port: config.smtp_port, - secure: config.smtp_secure, - auth: config.smtp_user ? { + port: parseInt(config.smtp_port), + secure: config.smtp_secure === true || config.smtp_secure === 1, + auth: config.smtp_user && config.smtp_pass ? { user: config.smtp_user, pass: config.smtp_pass - } : undefined + } : undefined, + logger: process.env.NODE_ENV === 'development', + debug: process.env.NODE_ENV === 'development' + }; + + console.log('Creating email transporter with config:', { + host: transportConfig.host, + port: transportConfig.port, + secure: transportConfig.secure, + auth: transportConfig.auth ? 'configured' : 'none' }); + const transporter = nodemailer.createTransport(transportConfig); + // Send test email await transporter.sendMail({ from: `${config.from_name} <${config.from_email}>`, @@ -145,9 +172,27 @@ router.post('/test', adminAuth, async (req, res) => { res.json({ message: 'Test email sent successfully' }); } catch (error) { console.error('Test email error:', error); + console.error('Error stack:', error.stack); + + // Provide more specific error messages + let errorMessage = 'Failed to send test email'; + let details = error.message; + + if (error.code === 'ECONNREFUSED') { + errorMessage = 'Failed to connect to SMTP server'; + details = 'Please check your SMTP host and port settings'; + } else if (error.code === 'EAUTH') { + errorMessage = 'SMTP authentication failed'; + details = 'Please check your SMTP username and password'; + } else if (error.code === 'ESOCKET') { + errorMessage = 'Network error'; + details = 'Could not establish connection to SMTP server'; + } + res.status(500).json({ - error: 'Failed to send test email', - details: error.message + error: errorMessage, + details: details, + code: error.code }); } });