To handle high volumes of emails or to ensure reliable delivery, consider using an email queue. Libraries like Bull or Agenda can help with this.
Example using Bull:
Install Bull and Redis:
npm install bull
Set up a Bull queue:
const Bull = require('bull');
const nodemailer = require('nodemailer');
const redis = require('redis');
// Create a Redis client
const redisClient = redis.createClient();
// Create a Bull queue
const emailQueue = new Bull('email', { redis: redisClient });
// Create a transporter object
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: process.env.EMAIL_USER,
pass: process.env.EMAIL_PASS
}
});
// Process email jobs
emailQueue.process(async (job) => {
const { to, subject, text } = job.data;
await transporter.sendMail({ from: process.env.EMAIL_USER, to, subject, text });
});
// Add a job to the queue
emailQueue.add({
to: '[email protected]',
subject: 'Queued Email',
text: 'This email was sent using a Bull queue.'
});
Leave a Reply