- 渲染后内容 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 显式开启
62 lines
2.5 KiB
INI
62 lines
2.5 KiB
INI
; broadcast.py 参数文件:每次运行自动读取;命令行参数优先级更高
|
||
; 注意:本文件不控制 --send/--yes,正式发送仍需命令行显式指定
|
||
|
||
[path]
|
||
; conf/app.ini 路径(相对路径按运行脚本时的当前目录解析)
|
||
config = ../auto/conf/app.ini
|
||
|
||
[site]
|
||
site_url = https://box.shiroko.one
|
||
box_prefix = /_/
|
||
|
||
; 自定义占位符:模板里用 {{键名}} 引用
|
||
[vars]
|
||
expire_date = 2026-12-24
|
||
old_domain = box.tama.guru
|
||
|
||
[send]
|
||
; to = 可选:默认测试收件邮箱(正式群发用命令行 --send,不加 --to)
|
||
delay = 1.0
|
||
group_pause = 3.0
|
||
; SMTP 连接空闲超过该秒数就主动重连再发。
|
||
; delay 调大时(比如 60s/封)服务器会掐掉空闲连接,出现整批
|
||
; 「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]
|
||
; 发送中巡检收件箱:出现「外发频率超过邮件系统限制」类限流退信立即中止发送
|
||
; 中止后会把限流地址从断点清单剔除,等限制恢复重跑即自动补发
|
||
watch_bounces = 1
|
||
|
||
; 每发 N 封巡检一次退信。调小更及时,但 IMAP 登录更频繁(不建议 < 5)
|
||
watch_every = 10
|
||
|
||
; 退信核查时,分类不明的退信是否也按「可重试」一并剔除补发(默认 0,保守不补发)
|
||
prune_unknown = 0
|
||
|
||
; 停用无效地址清单:既不跳过已知无效地址,也不写入新的硬退信
|
||
no_invalid_list = 0
|
||
|
||
; 留空则用脚本同目录的默认文件名
|
||
invalid_file =
|
||
bounce_report =
|
||
|
||
; IMAP(退信核查要用发件邮箱的 IMAP;留空则按 SMTP 域名推导 smtp.xxx → imap.xxx)
|
||
imap_host =
|
||
imap_port = 993
|
||
|
||
; since = auto 表示从断点清单最早一条发送记录的时间开始扫描,只查本次群发的退信
|
||
since = auto
|
||
since_days = 3
|