@bernierllc/电子邮件批判者
带有货币控制的批发邮件, 速率限制, 重试策略, 以及故障处理 。 在所有电子邮件提供者中提供统一的批量API,在有本地供应商批量端点的地方使用,然后回到依次发送.
安装
npm install @bernierllc/email-batch-sender
使用量
import { createBatchSender } from '@bernierllc/email-batch-sender';
const sender = createBatchSender(emailSenderInstance, {
concurrency: 5,
rateLimit: { tokensPerInterval: 10, interval: 1000 },
retry: { maxRetries: 3, backoffMs: 1000 },
});
const result = await sender.sendBatch([
{ to: '[email protected]', subject: 'Hello', html: '<p>Hi Alice</p>' },
{ to: '[email protected]', subject: 'Hello', html: '<p>Hi Bob</p>' },
]);
console.log(`Sent: ${result.succeeded} / ${result.total}`);
出口
BatchSender-- 批发业务主要类别createBatchSender()-- 工厂功能TokenBucketRateLimiter-- 内部使用的限速器BatchSenderError-- 有错误代码的自定义错误类- 类型 :
BatchSenderOptions, (中文(简体) ),RateLimitOptions, (中文(简体) ),BatchRetryOptions, (中文(简体) ),BatchResult, (中文(简体) ),BatchEmailResult, (中文(简体) ),BatchProgress, (中文(简体) ),BatchEmailInput
提供者能力支持
本节记录了批量发送如何在电子邮件提供者之间进行行为,基于cononical CAPABILITY_MATRIX 内 @bernierllc/email-manager。 。 。 .
提供者的能力等级
| 提供者 | 能力级别 | 页:1 |
|---|---|---|
| 发送Grid | 提供者 | 本地批次 API 通过个性化; 提供者处理批次服务器侧面 |
| 邮件枪 | 提供者 | 本地批次通过收件人变量发送 |
| 邮戳 | 提供者 | 原产地批次 API 端点 (/email/batch(中文(简体) ) |
| 用户 | 提供者 | 土著 SendBulkEmail API 密码 |
| SMTP 软件 | 平台 | 没有本地批次支持; 此软件包会依次在 SMTP 连接上发送电子邮件 |
如何运作
-
提供者一级 (SendGrid,邮件枪,邮戳,SES): 电子邮件管理员代表到供应商的本地批发端点. 这个软件包将调用,处理速率限制,并管理复试. 供应商可以作为单一API呼叫(SendGrid个性化,Postmark批发端)或优化散装操作(SES)处理批发
SendBulkEmail) (中文(简体) ). -
平台一级 (SMTP):由于SMTP没有本土的批量支持,本软件包在SMTP连接上相继发送电子邮件. 货币,速率限制,再试逻辑都由这个软件包在平台层面处理.
退化行为
当与缺乏本地批量支持的供应商使用时( 目前只有 SMTP ):
- 战略数字 :
sequential-batch - 行为: 电子邮件通过 SMTP 连接一次发送一次, 尊重配置的货币限制和速率限制器
- 业绩: 慢于本地批次 API; 吞吐量取决于 SMTP 服务器响应时间和配置的货币/ 速率限制设置
- 可靠性: 完全重试支持可配置后退; 单个信件失败不会阻断批次的其余部分
覆盖选项
批量发送能力被标记 overridable: true 对于所有有本地支持的提供者,即使有本地批次 API,您也可以强制平台级顺序发送。 这对于调试或当供应商批量端点有临时问题时,可能有用.
// Force sequential sending regardless of provider
const sender = createBatchSender(emailSenderInstance, {
forceSequential: true,
concurrency: 3,
});
许可证
版权(c)2025 Bernier有限责任公司。 版权所有.
这个包裹凭有限使用许可证发给客户. 客户只能在交付的项目范围内使用并修改此代码. 未经Bernier有限责任公司书面同意,不得再分配或用于其他产品或商业供货.