From d0f69722682c55473048d879f872e142bf5447a1 Mon Sep 17 00:00:00 2001 From: QLHazyCoder <2825305047@qq.com> Date: Fri, 22 May 2026 11:04:04 +0800 Subject: [PATCH] fix cfte lookup mode when generating cfte mailboxes --- background.js | 47 ++++++++++++++------ tests/cloudflare-temp-email-provider.test.js | 38 ++++++++++++++++ 2 files changed, 72 insertions(+), 13 deletions(-) diff --git a/background.js b/background.js index 7b71a1d..62bb91a 100644 --- a/background.js +++ b/background.js @@ -2935,6 +2935,20 @@ function normalizeCloudflareTempEmailReceiveMailbox(value = '') { return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(normalized) ? normalized : ''; } +function resolveCloudflareTempEmailEffectiveLookupMode(state = {}, lookupMode = '', originalRecipient = '') { + const mailProvider = String(state?.mailProvider || '').trim().toLowerCase(); + const emailGenerator = String(state?.emailGenerator || '').trim().toLowerCase(); + const normalizedLookupMode = normalizeCloudflareTempEmailLookupMode(lookupMode); + const normalizedOriginalRecipient = normalizeCloudflareTempEmailReceiveMailbox(originalRecipient); + const canUseRegistrationLookup = mailProvider === CLOUDFLARE_TEMP_EMAIL_PROVIDER + && emailGenerator !== CLOUDFLARE_TEMP_EMAIL_GENERATOR + && normalizedLookupMode === CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_REGISTRATION_EMAIL + && Boolean(normalizedOriginalRecipient); + return canUseRegistrationLookup + ? CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_REGISTRATION_EMAIL + : CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_RECEIVE_MAILBOX; +} + function resolveCloudflareTempEmailPollTargetEmail(state = {}, pollPayload = {}, config = getCloudflareTempEmailConfig(state)) { const configuredReceiveMailbox = normalizeCloudflareTempEmailReceiveMailbox(config.receiveMailbox); const mailProvider = String(state?.mailProvider || '').trim().toLowerCase(); @@ -2942,11 +2956,14 @@ function resolveCloudflareTempEmailPollTargetEmail(state = {}, pollPayload = {}, const shouldPreferConfiguredReceiveMailbox = mailProvider === 'cloudflare-temp-email' && emailGenerator !== 'cloudflare-temp-email'; const requestedTarget = normalizeCloudflareTempEmailReceiveMailbox(pollPayload.targetEmail); - if ( - shouldPreferConfiguredReceiveMailbox - && normalizeCloudflareTempEmailLookupMode(config.lookupMode) === CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_REGISTRATION_EMAIL - ) { - return requestedTarget || normalizeCloudflareTempEmailReceiveMailbox(state.email); + const registrationEmail = normalizeCloudflareTempEmailReceiveMailbox(state.email); + const effectiveLookupMode = resolveCloudflareTempEmailEffectiveLookupMode( + state, + config.lookupMode, + requestedTarget || registrationEmail + ); + if (effectiveLookupMode === CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_REGISTRATION_EMAIL) { + return requestedTarget || registrationEmail; } if (shouldPreferConfiguredReceiveMailbox && configuredReceiveMailbox) { @@ -2957,7 +2974,7 @@ function resolveCloudflareTempEmailPollTargetEmail(state = {}, pollPayload = {}, return requestedTarget; } - return normalizeCloudflareTempEmailReceiveMailbox(state.email); + return registrationEmail; } const cloudMailProvider = self.MultiPageBackgroundCloudMailProvider.createCloudMailProvider({ @@ -6885,8 +6902,12 @@ async function deleteCloudflareTempEmailMail(config, mailId) { async function listCloudflareTempEmailMessages(state, options = {}) { const config = ensureCloudflareTempEmailConfig(state, { requireAdminAuth: true }); const address = normalizeCloudflareTempEmailAddress(options.address); - const lookupMode = normalizeCloudflareTempEmailLookupMode(options.lookupMode || config.lookupMode); const originalRecipient = normalizeCloudflareTempEmailReceiveMailbox(options.originalRecipient); + const lookupMode = resolveCloudflareTempEmailEffectiveLookupMode( + state, + options.lookupMode || config.lookupMode, + originalRecipient + ); const useRegistrationLookup = lookupMode === CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_REGISTRATION_EMAIL && Boolean(originalRecipient); const queryAddress = useRegistrationLookup ? '' : address; @@ -6922,15 +6943,15 @@ async function pollCloudflareTempEmailVerificationCode(step, state, pollPayload const config = ensureCloudflareTempEmailConfig(state, { requireAdminAuth: true }); const targetEmail = resolveCloudflareTempEmailPollTargetEmail(state, pollPayload, config); const registrationEmail = normalizeCloudflareTempEmailReceiveMailbox(state.email); - const lookupMode = normalizeCloudflareTempEmailLookupMode(config.lookupMode); - const mailProvider = String(state?.mailProvider || '').trim().toLowerCase(); - const emailGenerator = String(state?.emailGenerator || '').trim().toLowerCase(); - const useRegistrationLookup = mailProvider === 'cloudflare-temp-email' - && emailGenerator !== 'cloudflare-temp-email' - && lookupMode === CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_REGISTRATION_EMAIL; const originalRecipient = normalizeCloudflareTempEmailReceiveMailbox(pollPayload.targetEmail) || registrationEmail || targetEmail; + const lookupMode = resolveCloudflareTempEmailEffectiveLookupMode( + state, + config.lookupMode, + originalRecipient + ); + const useRegistrationLookup = lookupMode === CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_REGISTRATION_EMAIL; if (!targetEmail) { throw new Error('Cloudflare Temp Email 轮询前缺少目标邮箱地址,请先填写注册邮箱或“邮件接收”邮箱。'); } diff --git a/tests/cloudflare-temp-email-provider.test.js b/tests/cloudflare-temp-email-provider.test.js index abdd48d..f12c8fb 100644 --- a/tests/cloudflare-temp-email-provider.test.js +++ b/tests/cloudflare-temp-email-provider.test.js @@ -70,6 +70,7 @@ function createProviderApi(options = {}) { extractFunction('throwIfStopped'), extractFunction('normalizeCloudflareTempEmailLookupMode'), extractFunction('normalizeCloudflareTempEmailReceiveMailbox'), + extractFunction('resolveCloudflareTempEmailEffectiveLookupMode'), extractFunction('resolveCloudflareTempEmailPollTargetEmail'), extractFunction('summarizeCloudflareTempEmailMessagesForLog'), extractFunction('pollCloudflareTempEmailVerificationCode'), @@ -82,6 +83,8 @@ const CLOUDFLARE_TEMP_EMAIL_DEFAULT_PAGE_SIZE = 20; const CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_RECEIVE_MAILBOX = 'receive-mailbox'; const CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_REGISTRATION_EMAIL = 'registration-email'; const DEFAULT_CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE = CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_RECEIVE_MAILBOX; +const CLOUDFLARE_TEMP_EMAIL_PROVIDER = 'cloudflare-temp-email'; +const CLOUDFLARE_TEMP_EMAIL_GENERATOR = 'cloudflare-temp-email'; const logs = []; const listCalls = []; const messages = options.messages; @@ -233,6 +236,41 @@ test('pollCloudflareTempEmailVerificationCode ignores stale receive mailbox when assert.deepEqual(api.snapshot().listCalls.map((call) => call.address), ['generated@email.20021108.xyz']); }); +test('pollCloudflareTempEmailVerificationCode ignores stale registration lookup mode for generated CFTE mailboxes', async () => { + const api = createProviderApi({ + receiveMailbox: 'forward-box@email.20021108.xyz', + lookupMode: 'registration-email', + messages: [{ + id: 'mail-4', + address: 'generated@email.20021108.xyz', + originalRecipient: '', + receivedDateTime: '2026-04-13T11:30:00.000Z', + subject: 'Signup verification code', + from: { emailAddress: { address: 'noreply@tm.openai.com' } }, + bodyPreview: 'Your verification code is 975310.', + }], + }); + + const result = await api.pollCloudflareTempEmailVerificationCode(4, { + email: 'generated@email.20021108.xyz', + mailProvider: 'cloudflare-temp-email', + emailGenerator: 'cloudflare-temp-email', + cloudflareTempEmailLookupMode: 'registration-email', + cloudflareTempEmailReceiveMailbox: 'forward-box@email.20021108.xyz', + }, { + targetEmail: 'generated@email.20021108.xyz', + maxAttempts: 1, + intervalMs: 1, + }); + + assert.equal(result.code, '975310'); + assert.deepEqual(api.snapshot().listCalls, [{ + address: 'generated@email.20021108.xyz', + lookupMode: 'receive-mailbox', + originalRecipient: 'generated@email.20021108.xyz', + }]); +}); + test('pollCloudflareTempEmailVerificationCode filters by original recipient in registration lookup mode', async () => { const api = createProviderApi({ receiveMailbox: 'forward-box@email.20021108.xyz',