Home > Net >  Sending Emails at Specific Time/Date with NodeJS from values in React App
Sending Emails at Specific Time/Date with NodeJS from values in React App

Time:08-29

My current ReactJS application enables users to be able to submit time, date and text values, which is posted to a NodeJS backend.

Here is my current NodeJS code:

app.post("/send", function (req, res) {
 let mailOptions = {
   from: `${req.body.vals.email}`,
   to: process.env.EMAIL,
   subject: 'SUBJECT INFO',
   html: `${req.body.vals.date} ${req.body.vals.time} ${req.body.vals.info}`,
 };


 transporter.sendMail(mailOptions, function (err, data) {
   if (err) {
     res.json({
       status: "fail",
     });
   } else {
     console.log("email sent");
     res.json({
       status: "success",
     });
   }
 });
});

I want to be be able to schedule the emails to be sent at the given values of time and date from the front-end ReactJS.

I have tried to use node-schedule but the whole date/time threw me off.

Edit:

This is the current date and time format that comes back.

date: 2022-08-28 time: 14:07

[edit: current solution not working]

app.post("/send", function (req, res) {
 let mailOptions = {
   from: `${req.body.vals.email}`,
   to: process.env.EMAIL,
   subject: 'SUBJECT INFO',
   html: `${req.body.vals.date} ${req.body.vals.time} ${req.body.vals.info}`,
 };

 const dateParsed = new Date(`${req.body.vals.date}T${req.body.vals.time}Z`)

schedule.scheduleJob(dateParsed, function(){
  transporter.sendMail(mailOptions, function (err, data) {
    if (err) {
      res.json({
        status: "fail",
      });
    } else {
      console.log("email sent");
      res.json({
        status: "success",
      });
      
    }
  });
 })


});

CodePudding user response:

I don't understand the problem with node-schedule

The API allows you to use date object instead of cron

const schedule = require('node-schedule');
const date = new Date(2012, 11, 21, 5, 30, 0);

const job = schedule.scheduleJob(date, function(){
  console.log('The world is going to end today.');
});

Dates

Easiest way I can think of:

const date = '2022-08-28'
const time = '14:07'

console.log(new Date(`${date}T${time}Z`))

But I'm not sure if it's best

Also, it will always give UTC time instead of local

Usually, dates are sent from the frontend as ISO already.

CodePudding user response:

This above solution works. The only issue is BST.

  • Related