tamakyi
|
1407fa9fb6
|
发信账号来源开关:app.ini / 程序自带 SMTP
- params.ini 新增 [mail]:source=app(默认,用 conf/app.ini [mail])或
own(用 account/password/smtp/port/skip_tls_verify 这套);--mail-source
app|own 可临时覆盖(命令行 > params.ini)
- 切换后发信与退信核查(IMAP,含主机推导)都走这套账号;切换到 own 但
配置缺项时直接 FATAL,不用半套配置
- password 支持 env:变量名:params.ini 会被 git 跟踪,明文密码时打印警告
- 交互模式:[mail] 配齐时多问一次来源;保存时 [mail] 小节原样回写
- 修复:save_params 缺少 batch_size/smtp_idle_reconnect 形参,但调用点已在
传 → 交互模式选「保存到 params.ini」会 TypeError 崩溃(上一并行编辑漏改)
- 补回上一轮被漏掉的 README「合并信封批量发送」章节与 452 安全机制条目
|
2026-09-08 00:23:51 +08:00 |
|
tamakyi
|
6dc33604d1
|
合并信封批量发送 --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 显式开启
|
2026-09-07 21:25:48 +08:00 |
|
tamakyi
|
5823b5fbb3
|
SMTP 断线自动重连:修掉大 delay 下整批 please run connect() first
现象:--delay 调到 60s/封、发 305 人时,第一封报 Server not connected,
之后每一封都是 please run connect() first,全军覆没。
根因:SMTP 服务器会掐掉空闲连接(QQ/163/阿里云常见 5~15 分钟,有的更短)。
脚本只在开头 smtp_login 一次,之后从不重连——连接一旦被服务器关掉,
同一个死掉的连接对象会被反复使用,除第一封外全是 connect() 报错。
delay 越大必然越早触发;以前默认 1s/封时几乎等不到超时,所以没暴露过。
改动:
- 新增 SmtpSession 包装连接:
* 空闲超过 smtp_idle_reconnect 秒(默认 30,可 0 关闭)就主动断开重连,
不必每封都先吃一发失败
* 仍遇到断线类异常(ServerDisconnected/ConnectError/OSError)立即重连
重试,最多 3 次(间隔 2s/4s);耗尽后抛原始异常、该收件人如实计失败
* 只重试连接类异常;SMTP 拒收(5xx/4xx 回话)不重试,避免重复投递
* 「Server not connected」不会被误判为限流,不会误触发发送中止
- 新增 --smtp-idle-reconnect / params.ini [send] smtp_idle_reconnect
- 发送循环改用 SmtpSession,结束统一 close
|
2026-09-07 20:14:34 +08:00 |
|
tamakyi
|
f83ea3e29a
|
退信/巡检开关移入 params.ini [bounce],命令行仅作临时覆盖
原来这些开关只能靠命令行传,每次群发都得敲一长串,也容易漏。现在统一在
params.ini 的 [bounce] 小节长期配置,优先级为 命令行 > params.ini > 内置默认。
改动:
- load_params 新增 [bounce] 解析:watch_bounces / watch_every / prune_unknown /
no_invalid_list / invalid_file / bounce_report / imap_host / imap_port /
since / since_days;新增 _parse_bool 支持 1/0、yes/no、true/false、on/off,
留空或非法值忽略并回退默认(带警告)
- 相关 argparse 默认值改为 None,以便区分「用户显式传了」还是「没传」——
没传才用 params.ini 的值,保证命令行优先级
- save_params 回写 [bounce](用当前生效值),并用 _preserve_extra_sections
原样保留文件里其它手写小节,避免保存时把配置抹掉
- 交互模式参数摘要里显示巡检开关的当前值与来源
- 把 argparse 构造抽成 build_arg_parser(),便于测试
- params.ini 补上 [bounce] 小节的默认配置与注释;README 同步
|
2026-09-07 19:25:20 +08:00 |
|
tamakyi
|
5aad4a97e4
|
fix path error
|
2026-09-07 18:38:52 +08:00 |
|
tamakyi
|
912facaf2c
|
first init
|
2026-09-07 18:04:51 +08:00 |
|