Files
2025-11-30 09:05:59 +08:00

97 lines
2.7 KiB
JavaScript

// Node.js/Nodemailer configuration for MailHog
const nodemailer = require('nodemailer');
// Development configuration (using MailHog)
const createDevTransporter = () => {
return nodemailer.createTransporter({
host: 'localhost',
port: 1025,
secure: false, // TLS not required for MailHog
auth: false, // No authentication required
tls: {
rejectUnauthorized: false
},
logger: true, // Enable logging for debugging
debug: true // Show debug output
});
};
// Production configuration (using real SMTP)
const createProdTransporter = () => {
return nodemailer.createTransporter({
host: process.env.SMTP_HOST,
port: parseInt(process.env.SMTP_PORT || '587'),
secure: process.env.SMTP_SECURE === 'true', // true for 465, false for other ports
auth: {
user: process.env.SMTP_USER,
pass: process.env.SMTP_PASS
},
tls: {
rejectUnauthorized: true
}
});
};
// Get appropriate transporter based on environment
const getTransporter = () => {
if (process.env.NODE_ENV === 'production') {
return createProdTransporter();
} else {
return createDevTransporter();
}
};
// Email sending function
const sendEmail = async (options) => {
try {
const transporter = getTransporter();
const mailOptions = {
from: options.from || process.env.EMAIL_FROM || 'test@sender.local',
to: options.to,
subject: options.subject,
text: options.text,
html: options.html,
attachments: options.attachments
};
const info = await transporter.sendMail(mailOptions);
console.log('Email sent successfully:', {
messageId: info.messageId,
response: info.response,
accepted: info.accepted,
rejected: info.rejected
});
return info;
} catch (error) {
console.error('Email sending failed:', error);
throw error;
}
};
// Example usage
if (require.main === module) {
(async () => {
try {
await sendEmail({
to: 'test@recipient.local',
subject: 'Test Email from Nodemailer',
text: 'This is a test email sent via Nodemailer',
html: '<h1>Test Email</h1><p>This email was sent using Nodemailer with MailHog.</p>'
});
console.log('Test email sent successfully');
} catch (error) {
console.error('Failed to send test email:', error);
}
})();
}
module.exports = {
sendEmail,
createDevTransporter,
createProdTransporter,
getTransporter
};