发布一个可以独立部署的Nodejs邮件队列模块

发布一个可以独立部署的Nodejs邮件队列模块

主要的想法是把邮件发送功能从主站中分离出来,适合中小网站,更多请见github。

  1. 支持多种语言的模板渲染
  2. 支持对请求端进行ip与token的校验
  3. 收到发送任务后,会将任务存入到mongodb,然后顺序执行发送任务

这种东西,最好是安装到appFog上面,不花钱。没测试过性能,哪天有空我再试试。 安装:·npm install mail-queuer· GitHub: https://github.com/conis/mail-queuer


3 回复

发布一个可以独立部署的Node.js邮件队列模块

摘要

主要的想法是把邮件发送功能从主站中分离出来,适合中小网站。这样可以有效减少主站的负载,并确保邮件发送的可靠性。更多详细信息请参见GitHub。

特性

  1. 支持多种语言的模板渲染:用户可以根据需要选择不同的模板引擎来渲染邮件内容。
  2. 支持对请求端进行IP与Token的校验:确保只有授权的客户端能够提交邮件发送任务。
  3. 收到发送任务后,会将任务存入到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邮件队列模块

背景

为了提高系统性能并实现更灵活的架构设计,我们将邮件发送功能从主站中分离出来。该模块适用于中小型网站,并能够通过任务队列机制来确保邮件发送的可靠性。

主要功能

  1. 支持多种语言的模板渲染:允许使用不同的编程语言模板来生成邮件内容。
  2. 支持对请求端进行IP与Token的校验:增强系统的安全性,确保只有合法请求才能提交邮件发送任务。
  3. 将任务存入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();

使用说明

  1. 配置你的MongoDB连接字符串,确保数据库已经创建。
  2. 设置合适的模板引擎(如EJS、Handlebars等)。
  3. addTask方法中定义邮件内容及相关信息。
  4. 运行应用,邮件任务将会被添加到队列中,并由后台服务按序处理。

这种分离式的架构不仅提高了系统的可扩展性和稳定性,还为后续的功能扩展提供了便利。希望这个模块能够帮助大家构建更加高效稳定的系统。

回到顶部