How to send 50000 emails at once in queue node js

Suneel Kumar
4 min readDec 23, 2022
Photo by Brett Jordan on Unsplash

Sending a large number of emails can be a challenging task, especially if you have to send them all at once. In this article, we’ll go over the steps of how to send 50,000 emails in a queue using Node.js.

Before we start, let’s go over the prerequisites for this task:

  • A server to host your Node.js application
  • An email service provider (ESP) to send emails (e.g. SendGrid, Mailgun, etc.)
  • Knowledge of Node.js and its modules

Step 1: Install Node.js modules

To send emails in Node.js, we’ll be using the following modules:

  • Nodemailer: A module that provides an easy-to-use interface for sending emails
  • Kue: A redis-backed job queue for Node.js

You can install these modules using npm by running the following commands in your terminal:

npm install nodemailer
npm install kue

Step 2: Set up an email service provider

For this article, we’ll be using SendGrid as our email service provider. To get started, sign up for a SendGrid account and obtain an API key. This API key will be used to send emails from your Node.js application.

Step 3: Create a Node.js script

Now that we have the necessary modules installed, we can create our Node.js script to send emails. Here’s a sample script that sends an email using Nodemailer and SendGrid:

const nodemailer = require('nodemailer');
const sendgridTransport = require('nodemailer-sendgrid-transport');

const transport = nodemailer.createTransport(sendgridTransport({
auth: {
api_key: 'YOUR_SENDGRID_API_KEY'
}
}));

const sendEmail = (email, subject, html) => {
const mailOptions = {
from: 'sender@example.com',
to: email,
subject,
html
};

transport.sendMail(mailOptions, (error, info) => {
if (error) {
console.log(error);
} else {
console.log(`Email sent to ${email}: ${info.response}`);
}
});
};

sendEmail('recipient@example.com', 'Test email', '<p>This is a test email</p>');

This script uses the nodemailer-sendgrid-transport module to create a SendGrid transport and send an email. Replace YOUR_SENDGRID_API_KEY with your SendGrid API key.

Step 4: Add email jobs to the queue

Now that we have a script that sends emails, we can add email jobs to the queue. Here’s a sample script that adds email jobs to the Kue queue:

const kue = require('kue');
const queue = kue.createQueue();

const addEmailJob = (email, subject, html) => {
const job = queue.create('email', {
email,
subject,
html
})
.save((error) => {
if (error) {
console.error(error);
} else {
console.log(`Email job added to queue: ${email}`);
}
});
};

// Add 50,000 email jobs to the queue
const emailList = [
{ email: 'recipient1@example.com', subject: 'Test email 1', html: '<p>This is a test email 1</p>' },
{ email: 'recipient2@example.com', subject: 'Test email 2', html: '<p>This is a test email 2</p>' },
// ...
{ email: 'recipient50000@example.com', subject: 'Test email 50000', html: '<p>This is a test email 50000</p>' }
];

emailList.forEach((emailData) => {
addEmailJob(emailData.email, emailData.subject, emailData.html);
});

This script adds 50,000 email jobs to the Kue queue. The `email` key in each job is set to the recipient’s email address, the `subject` key is set to the subject of the email, and the `html` key is set to the HTML content of the email.

Step 5: Process the email jobs

Finally, we need to process the email jobs in the queue. Here’s a sample script that processes email jobs using Kue:

const kue = require('kue');
const queue = kue.createQueue();
const sendEmail = require('./send-email'); // The script from step 3

queue.process('email', (job, done) => {
sendEmail(job.data.email, job.data.subject, job.data.html);
done();
});

This script uses the `queue.process()` method to process the `email` jobs in the queue. When a job is processed, the `sendEmail` function from step 3 is called to send the email.

Step 6: Start the queue

To start the queue, simply run the script from step 5. The email jobs in the queue will be processed one by one, sending a total of 50,000 emails.

Note: Keep in mind that sending a large number of emails at once can take a long time, depending on the speed of your server and the processing time of your ESP. It may also put a strain on your server and ESP, so it’s important to monitor their performance.

In conclusion, sending 50,000 emails in a queue using Node.js is a multi-step process that involves creating a Node.js script to send emails, adding email jobs to the queue, processing the email jobs, and starting the queue. By following these steps, you can send a large number of emails in an efficient and scalable manner.

Please Check My Another articles :

Maximize Email Efficiency: A Step-by-Step Guide to Sending 50,000 Emails at Once with Node.js and a Queue

Creating a Scalable and Reliable Emailing System with Node.js and AWS SES.

Scaling Email Sending with Node.js and AWS SES: A Guide to Sending 50,000 Emails at Once

--

--