From 544ecb33c2e81b294dd8c5ae3e045639f604bb19 Mon Sep 17 00:00:00 2001 From: QLHazyCoder <2825305047@qq.com> Date: Wed, 15 Apr 2026 20:29:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E9=82=AE=E4=BB=B6?= =?UTF-8?q?=E6=8E=A5=E6=94=B6=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=20Cloudflare=20Temp=20Email=20=E6=94=B6?= =?UTF-8?q?=E4=BB=B6=E9=82=AE=E7=AE=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- background.js | 38 ++++- sidepanel/sidepanel.html | 4 + sidepanel/sidepanel.js | 27 ++++ tests/background-icloud.test.js | 8 + tests/cloudflare-temp-email-provider.test.js | 151 +++++++++++-------- 5 files changed, 158 insertions(+), 70 deletions(-) diff --git a/background.js b/background.js index 8341250..a74ae57 100644 --- a/background.js +++ b/background.js @@ -200,6 +200,7 @@ const PERSISTED_SETTING_DEFAULTS = { cloudflareTempEmailBaseUrl: '', cloudflareTempEmailAdminAuth: '', cloudflareTempEmailCustomAuth: '', + cloudflareTempEmailReceiveMailbox: '', cloudflareTempEmailDomain: '', cloudflareTempEmailDomains: [], hotmailAccounts: [], @@ -648,11 +649,32 @@ function getCloudflareTempEmailConfig(state = {}) { baseUrl: normalizeCloudflareTempEmailBaseUrl(state.cloudflareTempEmailBaseUrl), adminAuth: String(state.cloudflareTempEmailAdminAuth || ''), customAuth: String(state.cloudflareTempEmailCustomAuth || ''), + receiveMailbox: normalizeCloudflareTempEmailReceiveMailbox(state.cloudflareTempEmailReceiveMailbox), domain: normalizeCloudflareTempEmailDomain(state.cloudflareTempEmailDomain), domains: normalizeCloudflareTempEmailDomains(state.cloudflareTempEmailDomains), }; } +function normalizeCloudflareTempEmailReceiveMailbox(value = '') { + const normalized = normalizeCloudflareTempEmailAddress(value); + if (!normalized) return ''; + return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(normalized) ? normalized : ''; +} + +function resolveCloudflareTempEmailPollTargetEmail(state = {}, pollPayload = {}, config = getCloudflareTempEmailConfig(state)) { + const configuredReceiveMailbox = normalizeCloudflareTempEmailReceiveMailbox(config.receiveMailbox); + if (configuredReceiveMailbox) { + return configuredReceiveMailbox; + } + + const requestedTarget = normalizeCloudflareTempEmailReceiveMailbox(pollPayload.targetEmail); + if (requestedTarget) { + return requestedTarget; + } + + return normalizeCloudflareTempEmailReceiveMailbox(state.email); +} + function normalizePersistentSettingValue(key, value) { switch (key) { case 'panelMode': @@ -715,6 +737,8 @@ function normalizePersistentSettingValue(key, value) { case 'cloudflareTempEmailAdminAuth': case 'cloudflareTempEmailCustomAuth': return String(value || ''); + case 'cloudflareTempEmailReceiveMailbox': + return normalizeCloudflareTempEmailReceiveMailbox(value); case 'cloudflareTempEmailDomain': return normalizeCloudflareTempEmailDomain(value); case 'cloudflareTempEmailDomains': @@ -2629,12 +2653,18 @@ async function listCloudflareTempEmailMessages(state, options = {}) { } async function pollCloudflareTempEmailVerificationCode(step, state, pollPayload = {}) { - const targetEmail = normalizeCloudflareTempEmailAddress(pollPayload.targetEmail || state.email); + const config = ensureCloudflareTempEmailConfig(state, { requireAdminAuth: true }); + const targetEmail = resolveCloudflareTempEmailPollTargetEmail(state, pollPayload, config); + const registrationEmail = normalizeCloudflareTempEmailReceiveMailbox(state.email); if (!targetEmail) { - throw new Error('Cloudflare Temp Email 轮询前缺少目标邮箱地址。'); + throw new Error('Cloudflare Temp Email 轮询前缺少目标邮箱地址,请先填写注册邮箱或“邮件接收”邮箱。'); } - await addLog(`步骤 ${step}:正在轮询 Cloudflare Temp Email 邮件(${targetEmail})...`, 'info'); + if (registrationEmail && registrationEmail !== targetEmail) { + await addLog(`步骤 ${step}:正在轮询 Cloudflare Temp Email 收件邮箱(${targetEmail}),注册邮箱为 ${registrationEmail}...`, 'info'); + } else { + await addLog(`步骤 ${step}:正在轮询 Cloudflare Temp Email 邮件(${targetEmail})...`, 'info'); + } const maxAttempts = Number(pollPayload.maxAttempts) || 5; const intervalMs = Number(pollPayload.intervalMs) || 3000; let lastError = null; @@ -2642,7 +2672,7 @@ async function pollCloudflareTempEmailVerificationCode(step, state, pollPayload for (let attempt = 1; attempt <= maxAttempts; attempt++) { throwIfStopped(); try { - const { config, messages } = await listCloudflareTempEmailMessages(state, { + const { messages } = await listCloudflareTempEmailMessages(state, { address: targetEmail, limit: pollPayload.limit || CLOUDFLARE_TEMP_EMAIL_DEFAULT_PAGE_SIZE, offset: pollPayload.offset || 0, diff --git a/sidepanel/sidepanel.html b/sidepanel/sidepanel.html index 24060c9..d123f68 100644 --- a/sidepanel/sidepanel.html +++ b/sidepanel/sidepanel.html @@ -202,6 +202,10 @@ Custom Auth +