Initial commit
This commit is contained in:
97
skills/mailhog/examples/app-configs/nodemailer.js
Normal file
97
skills/mailhog/examples/app-configs/nodemailer.js
Normal file
@@ -0,0 +1,97 @@
|
||||
// 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
|
||||
};
|
||||
Reference in New Issue
Block a user