如何在不影响 Node.JS 应用程序的情况下从后台异步发送大量电子邮件?

Posted

技术标签:

【中文标题】如何在不影响 Node.JS 应用程序的情况下从后台异步发送大量电子邮件?【英文标题】:How to Send Mass Email asynchronously from Background without affecting Node.JS Application? 【发布时间】:2019-03-18 00:03:28 【问题描述】:

我目前正在使用 nodemailer 从我的 node.js 应用程序发送电子邮件。 我正在寻找的是“某种东西”,它可以排队并安排多个用户发送大量电子邮件(每个用户 500 多封)。

这应该在后台作为单独的进程运行,并且必须由我的 node.js 应用程序触发。 电子邮件发送不应影响我的 Node.Js 应用程序(服务器)响应请求。

我知道上述陈述似乎更像是软件要求而不是要解决的问题,但我需要一个可靠的解决方案。请给出一个简短的解决方案(即使用什么“东西”)。

【问题讨论】:

这是一篇您可以查看的文章。使用 SQS 触发 lambda 可能是适合您的一种方式。 cloudonaut.io/… 非常好,但这些是第 3 方服务(我相信也不是免费的)。我正在寻找可以通过使用适当的包自行构建的东西,这些包可以由我的 node.js 应用程序安排、排队和触发 我很确定您每个月都会免费获得 100 万个 Amazon SQS 请求以及 100 万个 lambdas 请求。不太确定 lambda 请求,不要引用我的话。至于实际从 lambda 发送电子邮件,您仍然可以使用您选择的任何内容。 【参考方案1】:

创建一个 lambda 函数以仅使用您的 nodeMailer 脚本发送一封电子邮件。

在这个 lambda 中,我会将邮件缓存在实际导出函数之外,例如:

const nodemailer = require('nodemailer');

exports.handler = (event, context, callback) => 

    // ...NodeMailer stuff

    callback(null, event)
;

然后使用 SQS 事件触发此 lambda,如下所示: SQS as an event source to trigger Lambda | Medium

您可以使用节点 js 应用程序中的 JS AWS-SDK 向队列添加消息,如下所示: Calling the sendMessage operation | AWS Docs

【讨论】:

以上是关于如何在不影响 Node.JS 应用程序的情况下从后台异步发送大量电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

在不阻塞 dom 的情况下从后端渲染 ($compile) html 到视图中

如何在不影响 phpMyAdmin 的情况下从 mysql 中巧妙地删除 pma 表

如何在不重新保存的情况下从 iCloud 下载图像?

如何在不导致停机的情况下部署 Node.js 应用程序

如何在不打开的情况下从 CSV 文件中检索数据

如何在不知道个人资料 ID 的情况下从我的应用打开 LinkedIn 应用?