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 @@
+
+ 目标邮箱类型
+
+
+
+ 转发邮箱
+
+
获取策略