fix: improve email test endpoint error handling
Test and Lint / backend-test (push) Successful in 1m10s
continuous-integration/drone/push Build is passing
Test and Lint / frontend-test (push) Successful in 2m6s
Version and Release / version-bump (push) Successful in 32s
Version and Release / trigger-drone (push) Successful in 3s
Test and Lint / backend-test (push) Successful in 1m10s
continuous-integration/drone/push Build is passing
Test and Lint / frontend-test (push) Successful in 2m6s
Version and Release / version-bump (push) Successful in 32s
Version and Release / trigger-drone (push) Successful in 3s
- Add detailed validation for SMTP configuration - Add specific error messages for common SMTP issues (connection, auth, network) - Add logging to help debug email configuration issues - Check for masked passwords that shouldn't be used for sending - Parse smtp_port as integer and handle boolean smtp_secure properly This helps identify the exact cause of email sending failures instead of generic 500 errors. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -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.' });
|
return res.status(400).json({ error: 'Email configuration not found. Please configure SMTP settings first.' });
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create transporter
|
// Validate SMTP configuration
|
||||||
const transporter = nodemailer.createTransport({
|
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,
|
host: config.smtp_host,
|
||||||
port: config.smtp_port,
|
port: parseInt(config.smtp_port),
|
||||||
secure: config.smtp_secure,
|
secure: config.smtp_secure === true || config.smtp_secure === 1,
|
||||||
auth: config.smtp_user ? {
|
auth: config.smtp_user && config.smtp_pass ? {
|
||||||
user: config.smtp_user,
|
user: config.smtp_user,
|
||||||
pass: config.smtp_pass
|
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
|
// Send test email
|
||||||
await transporter.sendMail({
|
await transporter.sendMail({
|
||||||
from: `${config.from_name} <${config.from_email}>`,
|
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' });
|
res.json({ message: 'Test email sent successfully' });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Test email error:', 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({
|
res.status(500).json({
|
||||||
error: 'Failed to send test email',
|
error: errorMessage,
|
||||||
details: error.message
|
details: details,
|
||||||
|
code: error.code
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user