diff --git a/background.js b/background.js index 1e605b4..997b841 100644 --- a/background.js +++ b/background.js @@ -279,6 +279,8 @@ const PERSISTED_SETTING_DEFAULTS = { customEmailPool: [], autoDeleteUsedIcloudAlias: false, icloudHostPreference: 'auto', + icloudTargetMailboxType: 'icloud-inbox', + icloudForwardMailProvider: 'qq', icloudFetchMode: 'reuse_existing', accountRunHistoryTextEnabled: true, accountRunHistoryHelperBaseUrl: DEFAULT_ACCOUNT_RUN_HISTORY_HELPER_BASE_URL, @@ -692,6 +694,19 @@ function normalizeIcloudFetchMode(value = '') { return normalized === 'always_new' ? 'always_new' : 'reuse_existing'; } +function normalizeIcloudTargetMailboxType(value = '') { + return String(value || '').trim().toLowerCase() === 'forward-mailbox' + ? 'forward-mailbox' + : 'icloud-inbox'; +} + +function normalizeIcloudForwardMailProvider(value = '') { + const normalized = String(value || '').trim().toLowerCase(); + return ['qq', '163', '163-vip', '126', 'gmail'].includes(normalized) + ? normalized + : 'qq'; +} + function normalizeCustomEmailPool(value = []) { const source = Array.isArray(value) ? value @@ -1002,6 +1017,10 @@ function normalizePersistentSettingValue(key, value) { return Boolean(value); case 'icloudHostPreference': return normalizeIcloudHost(value) || 'auto'; + case 'icloudTargetMailboxType': + return normalizeIcloudTargetMailboxType(value); + case 'icloudForwardMailProvider': + return normalizeIcloudForwardMailProvider(value); case 'icloudFetchMode': return normalizeIcloudFetchMode(value); case 'accountRunHistoryHelperBaseUrl': @@ -6875,6 +6894,29 @@ async function executeStep3(state) { // Step 4: Get Signup Verification Code (qq-mail.js polls, then fills in signup-page.js) // ============================================================ +function getIcloudForwardMailConfig(state = {}, provider = 'qq') { + const normalizedProvider = normalizeIcloudForwardMailProvider(provider); + if (normalizedProvider === GMAIL_PROVIDER) { + return { + source: 'gmail-mail', + url: 'https://mail.google.com/mail/u/0/#inbox', + label: 'Gmail 邮箱', + inject: ['content/activation-utils.js', 'content/utils.js', 'content/gmail-mail.js'], + injectSource: 'gmail-mail', + }; + } + if (normalizedProvider === '163') { + return { source: 'mail-163', url: 'https://mail.163.com/js6/main.jsp?df=mail163_letter#module=mbox.ListModule%7C%7B%22fid%22%3A1%2C%22order%22%3A%22date%22%2C%22desc%22%3Atrue%7D', label: '163 邮箱' }; + } + if (normalizedProvider === '163-vip') { + return { source: 'mail-163', url: 'https://webmail.vip.163.com/js6/main.jsp?df=mail163_letter#module=mbox.ListModule%7C%7B%22fid%22%3A1%2C%22order%22%3A%22date%22%2C%22desc%22%3Atrue%7D', label: '163 VIP 邮箱' }; + } + if (normalizedProvider === '126') { + return { source: 'mail-163', url: 'https://mail.126.com/js6/main.jsp?df=mail163_letter#module=mbox.ListModule%7C%7B%22fid%22%3A1%2C%22order%22%3A%22date%22%2C%22desc%22%3Atrue%7D', label: '126 邮箱' }; + } + return { source: 'qq-mail', url: 'https://wx.mail.qq.com/', label: 'QQ 邮箱' }; +} + function getMailConfig(state) { const provider = state.mailProvider || 'qq'; if (provider === 'custom') { @@ -6887,6 +6929,17 @@ function getMailConfig(state) { const configuredHost = getConfiguredIcloudHostPreference(state) || normalizeIcloudHost(state?.preferredIcloudHost) || 'icloud.com'; + const targetMailboxType = normalizeIcloudTargetMailboxType(state?.icloudTargetMailboxType); + const useForwardMailbox = targetMailboxType === 'forward-mailbox'; + if (useForwardMailbox) { + const forwardProvider = normalizeIcloudForwardMailProvider(state?.icloudForwardMailProvider); + const forwardConfig = getIcloudForwardMailConfig(state, forwardProvider); + return { + ...forwardConfig, + label: `iCloud 转发(${forwardConfig.label})`, + icloudForwarding: true, + }; + } const loginUrl = getIcloudLoginUrlForHost(configuredHost) || 'https://www.icloud.com/'; const mailUrl = getIcloudMailUrlForHost(configuredHost) || loginUrl; return { diff --git a/sidepanel/sidepanel.html b/sidepanel/sidepanel.html index ff8faa3..8e2e478 100644 --- a/sidepanel/sidepanel.html +++ b/sidepanel/sidepanel.html @@ -663,6 +663,23 @@ +
+ 目标邮箱类型 + +
+
获取策略