【问题标题】:Nodejs Email Sending using sendgrid web api使用 sendgrid web api 发送 Nodejs 电子邮件
【发布时间】:2019-06-14 18:08:01
【问题描述】:

我正在开发电子邮件发送服务,可能用于使用 sendgrid Web API 发送批量电子邮件,但我无法找出可扩展系统的最佳实践。我希望记录所有未能发送的电子邮件,并在发送所有电子邮件后重试发送到那些失败的电子邮件。我正在使用 NodeJs,所以只想知道是否有任何方法可以加快我的流程(例如同时发送多封电子邮件)

【问题讨论】:

  • 通常发送网格在发送电子邮件时返回错误代码或状态代码。解决它的一种方法是将要发送的每封电子邮件记录在数据库中,如果失败则标记 0,如果电子邮件发送成功则标记 1,然后使用某些调度程序或 cron 作业再次尝试。但是您必须处理忽略无效电子邮件或不存在的电子邮件
  • 但是在我必须发送大约 999 封电子邮件的情况下(根据文档一次它的 1K 封电子邮件),如果出现错误,它不会处理电子邮件传递,而是会给我是一个错误,这不是我希望的情况,而是我需要一个列表,仅列出那些失败的电子邮件,并且在处理它时不应破坏程序,以防任何电子邮件无法传递,因此也不鼓励使用 Promise.all。它应该并行工作(我知道 nodejs 是单线程的,只是没有得到正确的词)而不会中断,是的,我必须使用一些数据库来进行检查。

标签: node.js email sendgrid


【解决方案1】:

Sendgrid 为 node.js 集成提供了一个 npm 包,因此您不必重新发明轮子。它以高速率接受消息,因此您应该不会遇到将您的消息传递到 sendgrid 的问题。您只需将消息转储到 sendgrid。

电子邮件作为一种存储转发系统,本质上是异步的。这意味着它的运行远非实时。一些消息在几秒钟内送达,而另一些则需要几个小时(例如,当它们变软时——“稍后重试”——来自目标服务器的拒绝)。

Sendgrid 使用“反弹”API 处理此问题。 (并且在他们的 Web 后端应用程序中具有“反弹”功能)。许多退回邮件是“硬”退回邮件,这意味着您必须避免再次尝试向该地址发送邮件。您可以使用退回 API 来检索退回邮件的列表。您应该从您的电子邮件列表中删除这些地址,并且不要尝试再次发送它们。 (Sendgrid 禁止重复发送邮件且无法投递的用户。)

他们还有一个“无效电子邮件”API。这类似于“反弹”并返回格式错误的地址列表,或者,如果 sendgrid 可以判断,目标服务器上不存在。同样,您应该从电子邮件列表中删除这些地址。如果现在无效,明天就无效了。

Sendgrid 提供有关此主题的各种教程。

【讨论】:

    【解决方案2】:

    有多种方法可以解决这个问题,我会建议两种对我来说似乎很明显的方法。

    1. (推荐 - 简单)使用名为 queue Async Documentation 的异步模块的控制流选项。您可以以对象请求数组的形式输入所有请求,然后将并发设置更改为 100,它将同时运行 100 个工作线程,并记录错误建立一个单独的机制,一旦所有值都已跑通单独处理。

    2. 使用 node.js 原生方法生成多个 worker。

    【讨论】:

    • 这是正确答案,我们需要发送多封电子邮件的选项,sendgrid 没有针对单个请求发送 10 多封电子邮件的选项!通过 require('request-promise') 也是我探索的方式之一,stackoverflow.com/questions/54209690/…
    猜你喜欢
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 2016-11-30
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    相关资源
    最近更新 更多