Browse Source

feat: 添加 Duck 邮箱自动获取重试机制,优化邮箱获取失败时的处理流程

QLHazyCoder 4 tháng trước cách đây
mục cha
commit
393bfb2ae8
2 tập tin đã thay đổi với 16 bổ sung7 xóa
  1. 1 1
      README.md
  2. 15 6
      background.js

+ 1 - 1
README.md

@@ -163,7 +163,7 @@ Step 3 使用的注册邮箱。
 也就是说:
 
 - 如果 Duck 邮箱可自动获取,整套流程更接近全自动
-- 如果不能自动获取,Auto 会在邮箱阶段暂停
+- 如果 Duck 自动获取失败,后台会先自动重试 5 次;仍失败时,Auto 才会在邮箱阶段暂停
 - Auto 的暂停状态会保存在会话状态中,重新打开侧边栏后仍可继续
 - 如果你在 Auto 暂停时改为手动点步骤或跳过步骤,面板会先确认并停止 Auto,再切回手动控制
 - 选择 `继续当前` 时,后台不会先做大而全的前置校验,而是从当前步骤状态直接继续;缺什么条件,就在运行到那一步时再报错或暂停

+ 15 - 6
background.js

@@ -1317,6 +1317,7 @@ let autoRunActive = false;
 let autoRunCurrentRun = 0;
 let autoRunTotalRuns = 1;
 let autoRunAttemptRun = 0;
+const DUCK_EMAIL_MAX_ATTEMPTS = 5;
 const VERIFICATION_POLL_MAX_ROUNDS = 5;
 const AUTO_STEP_DELAYS = {
   1: 2000,
@@ -1355,14 +1356,22 @@ async function ensureAutoEmailReady(targetRun, totalRuns, attemptRuns) {
     return currentState.email;
   }
 
-  try {
-    const duckEmail = await fetchDuckEmail({ generateNew: true });
-    await addLog(`=== 目标 ${targetRun}/${totalRuns} 轮:Duck 邮箱已就绪:${duckEmail}(第 ${attemptRuns} 次尝试)===`, 'ok');
-    return duckEmail;
-  } catch (err) {
-    await addLog(`Duck 邮箱自动获取失败:${err.message}`, 'warn');
+  let lastDuckError = null;
+  for (let duckAttempt = 1; duckAttempt <= DUCK_EMAIL_MAX_ATTEMPTS; duckAttempt++) {
+    try {
+      if (duckAttempt > 1) {
+        await addLog(`Duck 邮箱:正在进行第 ${duckAttempt}/${DUCK_EMAIL_MAX_ATTEMPTS} 次自动获取重试...`, 'warn');
+      }
+      const duckEmail = await fetchDuckEmail({ generateNew: true });
+      await addLog(`=== 目标 ${targetRun}/${totalRuns} 轮:Duck 邮箱已就绪:${duckEmail}(第 ${attemptRuns} 次尝试,Duck 第 ${duckAttempt}/${DUCK_EMAIL_MAX_ATTEMPTS} 次获取)===`, 'ok');
+      return duckEmail;
+    } catch (err) {
+      lastDuckError = err;
+      await addLog(`Duck 邮箱自动获取失败(${duckAttempt}/${DUCK_EMAIL_MAX_ATTEMPTS}):${err.message}`, 'warn');
+    }
   }
 
+  await addLog(`Duck 邮箱自动获取已连续失败 ${DUCK_EMAIL_MAX_ATTEMPTS} 次:${lastDuckError?.message || '未知错误'}`, 'error');
   await addLog(`=== 目标 ${targetRun}/${totalRuns} 轮已暂停:请先获取 Duck 邮箱或手动粘贴邮箱,然后继续 ===`, 'warn');
   await broadcastAutoRunStatus('waiting_email', {
     currentRun: targetRun,