邮件中断与恢复
核对待执行 UID 和 SMTP 未知结果,避免重跑不确定的邮件任务。
Email 渠道在执行和 SMTP 发送前记录持久状态。任务副作用、邮件服务器接纳和本地游标无法在一个事务里提交,因此遇到未知结果时会停下来要求核对。
状态归属
状态文件位于 $QWEN_HOME/channels/
切换账号会创建独立基线;服务端 UIDVALIDITY 改变也会重新建基线并跳过当前文件夹已有邮件。不要把账号切换或删除状态当成重试旧任务的方法。
为什么拒绝自动重放
执行任务前,渠道把 UID 写入 pending;每次 SMTP 发送前,把 outgoing message ID 写入 outboundPending,主动发送也一样。相应操作完成后才删除对应记录。
进程在任务中途停止,或 SMTP 结果不确定时,记录会留下。重启会报告状态路径、待处理 UID 和发送 message ID,并拒绝重放。损坏或不可读的状态也会阻止启动。
核对步骤
- 停止渠道,防止继续接收和执行。
- 检查邮箱中是否已经出现发送结果,并核对任务涉及的代码、文件或其他实际副作用。
- 对确认已处理的事项,仅从 pending 删除相应 UID、从 outboundPending 删除相应 outgoing ID。
- 保留游标与线程元数据,再启动渠道。
没有足够证据的记录应继续保留,直到能确定如何处理。不要直接删除 state.json;文件缺失会建立新基线并跳过已有邮件,既不能证明旧任务失败,也不能可靠重试。旧附件目录在核对完成后、接收新工作前清理。
会话恢复边界
邮件线程标识和准入进度可跨重启保存,agent 历史则服从运行模式:当前独立 channel start 冷启动不会恢复保存的 agent 会话,daemon worker 会恢复路由。
停止渠道会阻止排队轮次开始 agent 工作,但已经运行的操作仍可能完成。核对时应查看实际副作用和发信结果,而不是把进程停止时间当作所有操作的取消边界。