我正在构建一个 SaaS 应用程序,用户登录并为未来的特定日期和时间创建提醒,当时间到了时,我的应用程序负责提醒各个用户他/她设置的提醒在过去 示例:
假设用户"Foo"
于 2018 年 4 月 27 日下午 2:30(未来的日期时间)登录并创建提醒。
我的应用程序应像任何其他提醒应用程序一样在该确切日期时间向
"Foo"
发送电子邮件。
像这样,可以为数百个用户提供数千个活动提醒。
Node.js技术
我尝试过像
不确定您是否仍在寻找解决方案,但我遇到了这个:
如果是通过电子邮件提醒,您应该尝试SendGrid或Mailgun。他们都免费提供数量有限的电子邮件。您还可以尝试使用 Twilio 进行短信提醒。所有这些都可以很容易地设置,您只需在设定的提醒时间调用 api 调用即可。
我将采用基于 Redis 的解决方案,该解决方案将 ttl 设置为 bull,当时间流逝时选择 yp 任务并将电子邮件发送给收件人。
const express = require('express');
const bodyParser = require('body-parser');
const { Queue, Worker } = require('bull');
const nodemailer = require('nodemailer');
const app = express();
const port = 3000;
// In-memory storage for reminders (replace this with a database in production)
const remindersQueue = new Queue('reminders', { redis: { port: 6379, host: 'localhost' } });
app.use(bodyParser.json());
// Endpoint for creating reminders
app.post('/create-reminder', async (req, res) => {
const { email, datetime, message } = req.body;
const job = await remindersQueue.add({ email, message }, { delay: new Date(datetime) - new Date() });
res.status(200).json({ success: true, message: 'Reminder created successfully', jobId: job.id });
});
// Set up a worker to process reminders
new Worker('reminders', async job => {
const { email, message } = job.data;
// Send email
await sendEmail(email, 'Reminder', `Reminder: ${message}`);
});
// Function to send email using nodemailer (replace with your email service details)
async function sendEmail(to, subject, text) {
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: '[email protected]',
pass: 'your-email-password',
},
});
const mailOptions = {
from: '[email protected]',
to,
subject,
text,
};
return transporter.sendMail(mailOptions);
}
// Start the server
app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
})
;