发布一个可以独立部署的Nodejs邮件队列模块
发布一个可以独立部署的Nodejs邮件队列模块
主要的想法是把邮件发送功能从主站中分离出来,适合中小网站,更多请见github。
- 支持多种语言的模板渲染
- 支持对请求端进行ip与token的校验
- 收到发送任务后,会将任务存入到mongodb,然后顺序执行发送任务
这种东西,最好是安装到appFog上面,不花钱。没测试过性能,哪天有空我再试试。 安装:·npm install mail-queuer· GitHub: https://github.com/conis/mail-queuer
3 回复
发布一个可以独立部署的Node.js邮件队列模块
摘要
主要的想法是把邮件发送功能从主站中分离出来,适合中小网站。这样可以有效减少主站的负载,并确保邮件发送的可靠性。更多详细信息请参见GitHub。
特性
- 支持多种语言的模板渲染:用户可以根据需要选择不同的模板引擎来渲染邮件内容。
- 支持对请求端进行IP与Token的校验:确保只有授权的客户端能够提交邮件发送任务。
- 收到发送任务后,会将任务存入到MongoDB,然后顺序执行发送任务:确保任务的可靠性和顺序性。
安装
这个模块可以通过npm进行安装:
npm install mail-queuer
示例代码
邮件队列服务端(使用Express)
首先,我们需要设置一个简单的Express应用来接收邮件发送请求:
const express = require('express');
const bodyParser = require('body-parser');
const MailQueue = require('mail-queuer');
const app = express();
// 初始化MailQueue
const mailQueue = new MailQueue({
mongoUri: 'mongodb://localhost:27017/mailqueue',
templateEngine: 'ejs'
});
app.use(bodyParser.json());
app.post('/send-mail', (req, res) => {
const { to, subject, template, data } = req.body;
// IP与Token校验
if (!req.headers['x-forwarded-for'] || !req.headers['authorization']) {
return res.status(401).json({ error: 'Unauthorized' });
}
// 将邮件任务添加到队列
mailQueue.addTask({
to,
subject,
template,
data
}).then(() => {
res.json({ success: true });
}).catch(err => {
console.error(err);
res.status(500).json({ error: 'Failed to add task' });
});
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
邮件队列处理脚本
为了处理存储在MongoDB中的任务,我们可以编写一个单独的脚本来定期检查并发送这些任务:
const MailQueue = require('mail-queuer');
const mailQueue = new MailQueue({
mongoUri: 'mongodb://localhost:27017/mailqueue',
templateEngine: 'ejs'
});
async function processTasks() {
const tasks = await mailQueue.getPendingTasks();
for (const task of tasks) {
try {
await mailQueue.sendMail(task);
await mailQueue.markAsSent(task._id);
} catch (err) {
console.error(err);
// 可以根据实际情况决定是否重试或记录错误
}
}
}
setInterval(processTasks, 60 * 1000); // 每分钟检查一次
GitHub
该项目托管在GitHub上,欢迎贡献和反馈: https://github.com/conis/mail-queuer
这种架构设计不仅可以减轻主站的压力,还能提高邮件发送的稳定性和可靠性。希望这个模块能帮助到你!
这种队列任务,redis更适合吧
发布一个可以独立部署的Node.js邮件队列模块
背景
为了提高系统性能并实现更灵活的架构设计,我们将邮件发送功能从主站中分离出来。该模块适用于中小型网站,并能够通过任务队列机制来确保邮件发送的可靠性。
主要功能
- 支持多种语言的模板渲染:允许使用不同的编程语言模板来生成邮件内容。
- 支持对请求端进行IP与Token的校验:增强系统的安全性,确保只有合法请求才能提交邮件发送任务。
- 将任务存入MongoDB数据库中,顺序执行发送任务:任务会被持久化存储,即使服务器重启也不会丢失,同时保证任务按顺序执行。
安装
npm install mail-queuer
GitHub地址
https://github.com/conis/mail-queuer
示例代码
const MailQueuer = require('mail-queuer');
const mailQueuer = new MailQueuer({
mongoUrl: 'mongodb://localhost:27017/mailQueue',
templateEngine: 'ejs', // 支持多种模板引擎
secret: 'your-secret-token' // 用于Token校验
});
// 添加邮件任务
async function sendEmail() {
const task = {
to: 'example@example.com',
subject: 'Test Email',
template: 'email-template', // 模板名称
data: { name: 'John Doe' } // 模板数据
};
try {
await mailQueuer.addTask(task);
console.log('邮件发送任务已成功添加到队列');
} catch (error) {
console.error('添加邮件发送任务失败:', error.message);
}
}
sendEmail();
使用说明
- 配置你的MongoDB连接字符串,确保数据库已经创建。
- 设置合适的模板引擎(如EJS、Handlebars等)。
- 在
addTask
方法中定义邮件内容及相关信息。 - 运行应用,邮件任务将会被添加到队列中,并由后台服务按序处理。
这种分离式的架构不仅提高了系统的可扩展性和稳定性,还为后续的功能扩展提供了便利。希望这个模块能够帮助大家构建更加高效稳定的系统。