如何在不影响 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 到视图中