diff --git a/src/tools/account-register/email-verification/connectors/imap-connector.js b/src/tools/account-register/email-verification/connectors/imap-connector.js index 654af32..5690ea9 100644 --- a/src/tools/account-register/email-verification/connectors/imap-connector.js +++ b/src/tools/account-register/email-verification/connectors/imap-connector.js @@ -79,8 +79,8 @@ class ImapConnector { const sinceDate = new Date(); sinceDate.setDate(sinceDate.getDate() - sinceDays); - // 搜索条件:最近N天的未读邮件 - this.imap.search(['UNSEEN', ['SINCE', sinceDate]], async (err, results) => { + // 搜索条件:最近N天的所有邮件(包括已读) + this.imap.search([['SINCE', sinceDate]], async (err, results) => { if (err) { reject(err); return; diff --git a/src/tools/account-register/email-verification/index.js b/src/tools/account-register/email-verification/index.js index 6857d82..abe20e4 100644 --- a/src/tools/account-register/email-verification/index.js +++ b/src/tools/account-register/email-verification/index.js @@ -32,9 +32,8 @@ class EmailVerificationService { logger.info('EmailVerification', `接收邮箱: ${recipientEmail}`); try { - // 1. 连接邮箱 + // 1. 初始化连接器 this.connector = new ImapConnector(this.config); - await this.connector.connect(); // 2. 等待验证码邮件 const startTime = Date.now(); @@ -45,23 +44,56 @@ class EmailVerificationService { attempts++; logger.info('EmailVerification', `第 ${attempts} 次检查邮件...`); - // 获取最新邮件 - const emails = await this.connector.getLatestEmails(10, 1); + // 关键:每次都重新连接以获取最新邮件(QQ邮箱IMAP有延迟问题) + if (attempts > 1) { + logger.info('EmailVerification', '断开并重新连接以刷新邮件...'); + this.connector.disconnect(); + await this.sleep(1000); + } + + await this.connector.connect(); + + // 获取最新邮件(倒序排列) + const emails = await this.connector.getLatestEmails(20, 1); if (emails && emails.length > 0) { - logger.info('EmailVerification', `找到 ${emails.length} 封未读邮件`); + logger.info('EmailVerification', `找到 ${emails.length} 封邮件`); - // 3. 查找匹配的邮件并提取验证码 - for (const email of emails.reverse()) { // 从最新的开始 - logger.info('EmailVerification', `检查邮件: 发件人="${email.from}", 主题="${email.subject}"`); + // 打印最近5条邮件信息(倒序,最新的在前) + const recentEmails = emails.slice(-5).reverse(); + logger.info('EmailVerification', '='.repeat(60)); + logger.info('EmailVerification', '最近5条邮件:'); + recentEmails.forEach((email, index) => { + const dateStr = email.date ? new Date(email.date).toLocaleString('zh-CN') : 'N/A'; + logger.info('EmailVerification', ` ${index + 1}. 时间: ${dateStr}`); + logger.info('EmailVerification', ` 发件人: ${email.from}`); + logger.info('EmailVerification', ` 主题: ${email.subject}`); + logger.info('EmailVerification', ` 收件人: ${email.to}`); + }); + logger.info('EmailVerification', '='.repeat(60)); + + // 3. 查找匹配的邮件并提取验证码(从最新的开始) + for (const email of emails.reverse()) { + logger.info('EmailVerification', `检查邮件: 发件人="${email.from}", 主题="${email.subject}", 收件人="${email.to}"`); + + // 关键:检查收件人是否匹配 + const emailTo = (email.to || '').toLowerCase(); + const isForRecipient = emailTo.includes(recipientEmail.toLowerCase()); + + if (!isForRecipient) { + logger.info('EmailVerification', ` ✗ 跳过:收件人不匹配(需要:${recipientEmail})`); + continue; + } + + logger.info('EmailVerification', ` ✓ 收件人匹配!`); for (const parser of this.parsers) { if (parser.canParse(email)) { - logger.success('EmailVerification', `✓ 找到匹配的邮件: ${email.subject}`); + logger.success('EmailVerification', ` ✓ 找到匹配的邮件: ${email.subject}`); const code = parser.extractCode(email); if (code) { - logger.success('EmailVerification', `✓ 成功提取验证码: ${code}`); + logger.success('EmailVerification', ` ✓ 成功提取验证码: ${code}`); // 标记为已读 try { @@ -75,14 +107,14 @@ class EmailVerificationService { return code; } else { - logger.warn('EmailVerification', `邮件匹配但无法提取验证码`); + logger.warn('EmailVerification', ` 邮件匹配但无法提取验证码`); } } } } logger.warn('EmailVerification', `未找到匹配的Windsurf验证码邮件`); } else { - logger.info('EmailVerification', `没有未读邮件`); + logger.info('EmailVerification', `没有邮件`); } // 等待一段时间后再检查