diff --git a/apps/api/src/dkv/providers/exchange-inbox.provider.ts b/apps/api/src/dkv/providers/exchange-inbox.provider.ts index f8b9cb7..3997e29 100644 --- a/apps/api/src/dkv/providers/exchange-inbox.provider.ts +++ b/apps/api/src/dkv/providers/exchange-inbox.provider.ts @@ -276,7 +276,8 @@ export class ExchangeInboxProvider implements InboxProvider { /** Resolve folder config to a EWS ParentFolderIds XML element. * Well-known names → . - * Custom names (e.g. "DKV" or "INBOX/DKV") → FindFolder deep search under inbox → . + * Custom names (e.g. "DKV" or "INBOX/DKV") → FindFolder deep search under msgfolderroot → . + * Searches msgfolderroot (full mailbox) so folders at root level are found, not just inbox subfolders. */ private async resolveFolderElement(config: InboxConfig): Promise { const folderCfg = config.folder ?? 'INBOX'; @@ -286,14 +287,20 @@ export class ExchangeInboxProvider implements InboxProvider { if (distinguished) { return ``; } - // Custom subfolder: resolve via FindFolder - const ffSoap = findFolderSoap('inbox', displayName); + // Custom subfolder: search entire mailbox (msgfolderroot) so top-level folders are found too + const ffSoap = findFolderSoap('msgfolderroot', displayName); const ffRes = await this.ewsPost(config, ffSoap, 'FindFolder'); - const folderId = extractAttr(ffRes.body, 't:FolderId', 'Id'); - if (!folderId) { - this.logger.warn(`EWS FindFolder: subfolder "${displayName}" not found — falling back to inbox`); + if (ffRes.statusCode !== 200) { + this.logger.warn(`EWS FindFolder HTTP ${ffRes.statusCode} for "${displayName}" — falling back to inbox`); return ``; } + this.logger.debug(`EWS FindFolder response for "${displayName}": ${ffRes.body.slice(0, 500)}`); + const folderId = extractAttr(ffRes.body, 't:FolderId', 'Id'); + if (!folderId) { + this.logger.warn(`EWS FindFolder: subfolder "${displayName}" not found under msgfolderroot — falling back to inbox`); + return ``; + } + this.logger.log(`EWS FindFolder: resolved "${displayName}" → FolderId ${folderId.slice(0, 20)}…`); return ``; }