Skip to content
FunCoding

Search

Search docs, Skills and MCP

邮件中断与恢复

核对待执行 UID 和 SMTP 未知结果,避免重跑不确定的邮件任务。

This page has not been translated into English yet. The original Chinese version is shown below.

Email 渠道在执行和 SMTP 发送前记录持久状态。任务副作用、邮件服务器接纳和本地游标无法在一个事务里提交,因此遇到未知结果时会停下来要求核对。

状态归属

状态文件位于 $QWEN_HOME/channels//email-/state.json,QWEN_HOME 默认 ~/.qwen。渠道名、规范化工作区、邮箱端点、用户和文件夹共同决定存储位置,只有一个进程可持有它。

切换账号会创建独立基线;服务端 UIDVALIDITY 改变也会重新建基线并跳过当前文件夹已有邮件。不要把账号切换或删除状态当成重试旧任务的方法。

为什么拒绝自动重放

执行任务前,渠道把 UID 写入 pending;每次 SMTP 发送前,把 outgoing message ID 写入 outboundPending,主动发送也一样。相应操作完成后才删除对应记录。

进程在任务中途停止,或 SMTP 结果不确定时,记录会留下。重启会报告状态路径、待处理 UID 和发送 message ID,并拒绝重放。损坏或不可读的状态也会阻止启动。

核对步骤

  1. 停止渠道,防止继续接收和执行。
  2. 检查邮箱中是否已经出现发送结果,并核对任务涉及的代码、文件或其他实际副作用。
  3. 对确认已处理的事项,仅从 pending 删除相应 UID、从 outboundPending 删除相应 outgoing ID。
  4. 保留游标与线程元数据,再启动渠道。

没有足够证据的记录应继续保留,直到能确定如何处理。不要直接删除 state.json;文件缺失会建立新基线并跳过已有邮件,既不能证明旧任务失败,也不能可靠重试。旧附件目录在核对完成后、接收新工作前清理。

会话恢复边界

邮件线程标识和准入进度可跨重启保存,agent 历史则服从运行模式:当前独立 channel start 冷启动不会恢复保存的 agent 会话,daemon worker 会恢复路由。

停止渠道会阻止排队轮次开始 agent 工作,但已经运行的操作仍可能完成。核对时应查看实际副作用和发信结果,而不是把进程停止时间当作所有操作的取消边界。