如何解决预约提醒 Nodemailer node-cron MongoDB
我在发送预订提醒电子邮件时遇到问题。我使用 nodemailer 和 node-cron。它运作良好。我想从数据库中读取日期,例如预订前一周发送电子邮件。我不知道该怎么做。我的模型:
start_time: {
type: String,required: true,},hour: {
type: String,courtId: {
type: String,userId: {
type: ObjectId,ref: 'userModel',});
const cron = require('node-cron');
const nodemailer = require('nodemailer');
const { getMaxListeners } = require('../config/database');
const sendEmail = function () {
const transporter = nodemailer.createTransport({
service: 'gmail',auth: {
user: `${process.env.EMAIL_ADDRESS}`,pass: `${process.env.EMAIL_PASSWORD}`,});
const mailOptions = {
from: `${process.env.EMAIL_ADDRESS}`,to: `${''}`,subject: 'Link To Reset Password',text:
'wiadomosć',};
transporter.sendMail(mailOptions,function (error,info) {
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
};
module.exports.task = function () {
cron.schedule('00 * * * * *',() => {
console.log('send');
//sendEmail();
});
};
我认为开始时间解析到目前为止?如何仅读取此一周后的预订?
解决方法
型号:***(我将 start_time 更改为类型:Date 并添加了 email_sent)
start_time: {
type: Date,required: true,},email_sent: {
type:Boolean,default:"false",required:true
},hour: {
type: String,courtId: {
type: String,userId: {
type: ObjectId,ref: 'userModel',});
服务器:
cron.schedule('00 * * * * *',() => {
Modal.find({}).
then(allUsers => {
for(let user of allUsers){
if(Date.now() < (user.start_time - (24*60*60*1000) * 7) && user.email_sent === false){
//sendEmail();
// here you need to update user.email_sent: true. and save.
}
}
})
});
*我也建议这样做,只找到 email_sent : false。你可以检查如何用猫鼬做到这一点。 (那么你不需要在 if 语句中检查它) *Model.find({ email_sent: "false" })
我只是做错了,我没有检查,你可以面对的错误:
- 您需要转换 start_time
- 检查布尔值 email_sent 如何获取它(作为字符串或布尔值),它会影响 if 语句。
这只是如何实现它的想法。我没有测试代码。 请尝试代码,如果您遇到任何问题,请告诉我
,我正在将字符串解析为 DATE。 2021-1-16 至 2021-01-15T23:00:00.000Z
const nodemailer = require('nodemailer');
const { getMaxListeners } = require('../config/database');
const reservationModel = require('../models/reservationModel');
const sendEmail = function () {
const transporter = nodemailer.createTransport({
service: 'gmail',auth: {
user: `${process.env.EMAIL_ADDRESS}`,pass: `${process.env.EMAIL_PASSWORD}`,});
const mailOptions = {
from: `${process.env.EMAIL_ADDRESS}`,to: `${''}`,subject: 'Link To Reset Password',text: 'wiadomosć',};
transporter.sendMail(mailOptions,function (error,info) {
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
};
module.exports.task = function () {
cron.schedule('00 * * * * *',() => {
console.log('scheduled');
reservationModel.find({ email_sent: false }).then(allReservation => {
for (let result of allReservation) {
let date = new Date(result.start_time);
console.log(date);
if (Date.now() < date - 24 * 60 * 60 * 1000 * 7) {
console.log('send');
sendEmail();
}
}
});
});
};
从未发送过邮件 2021-01-15T23:00:00.000Z - 字符串至今 1610277840044 Date.now()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。