When building applications, there are often times when you need to create and run background tasks that run on a schedule such as checking for updates or backing up data.
There are many ways of scheduling recurring tasks in Node.js such as using Crontab or cloud based extensions. Another approach to scheduling recurring tasks is through npm packages such as node-cron and node-schedule which provide flexible cron scheduling to Node.js through libraries without the need to rely on infrastructure.
In this tutorial, you’ll learn how to use node-schedule and SendGrid to schedule recurring emails.
Prerequisites
Here is what you will need to follow along with this article:
- Node.js installation
- A free SendGrid account
- An email address to test out this project
Configure your environment
Start off by logging into your SendGrid account and heading to the API Keys section. Click the blue “Create API Key” button on the top right.
Choose whatever name you’d like for your API key and click the blue “Create & View” button. Copy your API key and store it in a safe place.
Set up your Node.JS application
The next step is to create your scheduler. Inside your terminal or command prompt, navigate to your preferred directory and enter:
mkdir email-scheduler
cd email-scheduler
The next step is to initiate a brand new Node.js project and to install the dependencies required for this project.
npm init -y
npm install @sendgrid/mail dotenv node-schedule
You will need the @sendgrid/mail
package to send emails using the Twilio SendGrid API, the dotenv
package to access environment variables, and the node-schedule
package to schedule the recurring emails.
Your next step is to create two new files inside your main directory: index.js, and .env:
touch index.js .env
Open up the .env file using your preferred IDE and place the following lines into the file:
SENDGRID_API_KEY=XXXXXXXX
Replace the `SENDGRID_API_KEY` placeholder with the API key you copied earlier and save the file.\
Build your scheduler
Open the index.js file and place the following lines in the file:
require('dotenv').config()
const schedule = require('node-schedule');
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
This code will initialize the packages you installed earlier and will configure the SendGrid package with your API key.
Test out the SendGrid API
For our scheduler, let's create a recurring email that gets sent every 24 hours. But before you do this let's test out the SendGrid API. Add the following code to the index.js file:
const msg = {
to: RECIPIENT_EMAIL, // Change to your recipient
from: SENDER_EMAIL, // Change to your verified sender
subject: `Cheers to a new day!`,
text: 'Hope your day has been well!',
}
sgMail.send(msg);
In production applications, it's recommended to verify your Sender Identity by completing Domain Authentication. A Sender Identity represents your 'From' email address—the address your recipients see as the sender of your emails. For a step-by-step tutorial on this check out: How to set up domain authentication for Twilio SendGrid.
Save the file and navigate back to your terminal and enter the following command:
node index
Check the inbox of the recipient email and the email should arrive shortly. Now that the SendGrid API has been tested, let's set up the scheduler.
Set up the scheduler
Node Schedule is a flexible job scheduler that allows you to execute functions at specific times with optional recurrence rules. For your scheduler, you’ll be using Cron-style scheduling. The format for a Cron expression is as follows:
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ │
│ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)
│ │ │ │ └───── month (1 - 12)
│ │ │ └────────── day of month (1 - 31)
│ │ └─────────────── hour (0 - 23)
│ └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)
For more info on cron-based scheduling or how to use the Node Schedule package check out the Node Schedule package on npm.
In the index.js file, replace the testing code from earlier with the following:
const job = schedule.scheduleJob('0 10 * * *', function () {
const msg = {
to: RECIPIENT_EMAIL, // Change to your recipient
from: SENDER_EMAIL, // Change to your verified sender
subject: `Cheers to a new day!`,
text: 'Hope your day has been well!',
}
sgMail.send(msg);
});
The cron expression to schedule an email once a day will be: 0 10 * * *
. This will have our function run every day at 10:00:00 which translates to 10 AM. For testing purposes, feel free to change it to your nearest hour. Don’t forget to replace and add in the recipient and sender emails.
Save the file, run the script again with node index
in the terminal and you’re done! This script will continuously run and will recurringly send an email every 24 hours at the chosen hour.
What's Next?
In this tutorial, we went through how to send an email with SendGrid and how to schedule them using Node.js. Scheduling and automating tasks is easier than ever with Node.js and is even helpful when it comes to the development process of applications.
Start exploring more ways to harness the power of scheduling! Play around with the cron expressions or even expand the application by building more recurring jobs. To have better control of your scheduled jobs, implement a Node.js process manager - Packages such as PM2 and Forever run your script as a daemon and ensures your application is running 24/7.
For more solutions on scheduling tasks in Node.js check out: 4 ways to schedule Node.js code.
Happy Building!
Dhruv Patel is a Developer on Twilio’s Developer Voices team. You can find Dhruv working in a coffee shop with a glass of cold brew or he can either be reached at dhrpatel [at] twilio.com or LinkedIn.

Learn to use the Internationalization API to convert and formate dates across time zones in JavaScript.

Create a Video Application with SolidJs, Express, and Twilio's Video API.

In this tutorial, you’ll learn how to leverage Twilio Studio, Functions, and Programmable SMS to create an SMS service to find and grab contact information of your local representatives. You’ll also learn how to integrate the service with Twilio SendGrid to directly email an official through SMS.

Learn how your non-profit can accept donations and credit card transactions over the phone using Twilio Voice, TwiML Pay and JavaScript

Learn how to verify your users via WhatsApp using Node, Express and Twilio Verify.

本稿では、ネットワーク帯域幅プロフィールAPIの機能強化版を使用する利点と、その使用例をご紹介します。