From ead8f9e2b896ec8774f473d92d56d2dcd3b2a626 Mon Sep 17 00:00:00 2001 From: eoao Date: Sun, 10 May 2026 00:55:27 +0800 Subject: [PATCH] feat: optimize verification code recognition strategy --- mail-worker/src/email/email.js | 15 +----------- mail-worker/src/service/ai-service.js | 33 +++++++++++++++++++++++---- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/mail-worker/src/email/email.js b/mail-worker/src/email/email.js index 1136be3..fcccea7 100644 --- a/mail-worker/src/email/email.js +++ b/mail-worker/src/email/email.js @@ -92,7 +92,7 @@ export async function email(message, env, ctx) { } const toName = email.to.find(item => item.address === message.to)?.name || ''; - const code = aiCode === settingConst.aiCode.OPEN && checkAiCodeFilter(aiCodeFilter, email) ? await aiService.extractCode({ env }, email) : ''; + const code = await aiService.extractCode({ env }, email, { aiCode, aiCodeFilter }); const params = { toEmail: message.to, @@ -185,19 +185,6 @@ export async function email(message, env, ctx) { } } -function checkAiCodeFilter(aiCodeFilterStr, email) { - const filterList = aiCodeFilterStr ? aiCodeFilterStr.split(',').map(item => item.trim().toLowerCase()).filter(Boolean) : []; - - if (filterList.length === 0) { - return true; - } - - const fromEmail = (email.from?.address || '').trim().toLowerCase(); - const fromDomain = emailUtils.getDomain(fromEmail).toLowerCase(); - - return filterList.some(item => item === fromEmail || item === fromDomain); -} - function checkBlock(blackSubjectStr, blackContentStr, blackFromStr, email) { const blackFromList = blackFromStr ? blackFromStr.split(',') : [] diff --git a/mail-worker/src/service/ai-service.js b/mail-worker/src/service/ai-service.js index c658100..93b86a4 100644 --- a/mail-worker/src/service/ai-service.js +++ b/mail-worker/src/service/ai-service.js @@ -1,13 +1,16 @@ import emailUtils from '../utils/email-utils'; +import { settingConst } from '../const/entity-const'; + +const codeKeywords = ['码', '令牌', 'code', 'token']; const aiService = { - async extractCode(c, email) { - const ai = c.env.AI || c.env.ai; - - if (!ai) { + async extractCode(c, email, options = {}) { + if (!this.shouldExtractCode(options.aiCode, options.aiCodeFilter, email)) { return ''; } + const ai = c.env.AI; + try { const subject = email.subject || ''; const text = emailUtils.formatText(email.text || ''); @@ -48,6 +51,28 @@ const aiService = { console.error('验证码提取失败: ', e); return ''; } + }, + + shouldExtractCode(aiCode, aiCodeFilterStr, email) { + if (aiCode !== settingConst.aiCode.OPEN) { + return false; + } + + const filterList = aiCodeFilterStr ? aiCodeFilterStr.split(',').map(item => item.trim().toLowerCase()).filter(Boolean) : []; + + if (filterList.length > 0) { + const fromEmail = (email.from?.address || '').trim().toLowerCase(); + const fromDomain = emailUtils.getDomain(fromEmail).toLowerCase(); + return filterList.some(item => item === fromEmail || item === fromDomain); + } + + const subject = email.subject || ''; + const text = emailUtils.formatText(email.text || ''); + const htmlText = emailUtils.htmlToText(email.html || ''); + const content = `${subject}\n${htmlText || text}`; + const lowerContent = content.toLowerCase(); + + return codeKeywords.some(keyword => lowerContent.includes(keyword)); } };