合并信封批量发送 --batch-size:同内容多收件人一封多投,452 自动拆批

- 渲染后内容 sha256 分桶,仅完全相同的收件人合并信封;含 {{name}} 等
  个人化占位符时自动回退逐封,不会错合
- 一个信封 = 1×MAIL FROM + N×RCPT TO + 1×DATA:发信次数从「人数」降到
  「信封数」,显著降低触发「外发频率超过限制」类限流的概率
- To: 头只显示站点名+发件邮箱,真实收件人走 RCPT TO 信封互相不可见
- 452/too many recipients 特判:不算限流不中止,batch_size 砍半重试
- refused dict 逐人处理:5xx 记无效清单、限流码仍触发立即中止
- SmtpSession.send_to 统一重连重试;断点续发按人记录;巡检按收件人计数
- 顺带修复:交互模式保存 params.ini 时会抹掉手工加的 smtp_idle_reconnect
- 默认 0(逐封)不变,--batch-size N 或 params.ini [send] batch_size 显式开启
This commit is contained in:
tamakyi
2026-09-07 21:25:48 +08:00
parent 5823b5fbb3
commit 6dc33604d1
3 changed files with 244 additions and 73 deletions
+9
View File
@@ -23,6 +23,15 @@ group_pause = 3.0
; 「please run connect() first」;保持默认 30 即可自动重连,设 0 关闭
smtp_idle_reconnect = 30
; 合并信封批量发送(0=逐封)。渲染内容完全相同的收件人每 N 人共用一个
; SMTP 信封:发送次数从「人数」降到「信封数」(如 305 人、每 50 人一封
; → 约 7 次发信),可显著降低触发「外发频率超过邮件系统限制」类限流的
; 概率;若服务商按收件人计数则无缓解。
; 注意:单封收件人有服务商上限(常见 50~100),超限被 452 拒收时脚本会
; 自动砍半拆批重试,不会中止;delay 在批量模式下的语义是「每批之间」间隔。
; 模板含 {{name}} 等个人化占位符时内容逐人不同,自动回退逐封,不会错合。
batch_size = 0
; 退信核查 / 发送中限流巡检开关
; 这些都能在 params.ini 里长期配置,命令行同名参数可临时覆盖
[bounce]