; 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 ; 退信核查 / 发送中限流巡检开关 ; 这些都能在 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