fix(dkv): search msgfolderroot for EWS subfolder resolution
FindFolder was searching only under inbox DistinguishedFolderId, missing folders at mailbox root level. Now searches msgfolderroot (full mailbox) so custom folders like DKV are found regardless of placement. Also adds HTTP status check and debug logging for FindFolder responses. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -276,7 +276,8 @@ export class ExchangeInboxProvider implements InboxProvider {
|
||||
|
||||
/** Resolve folder config to a EWS ParentFolderIds XML element.
|
||||
* Well-known names → <t:DistinguishedFolderId>.
|
||||
* Custom names (e.g. "DKV" or "INBOX/DKV") → FindFolder deep search under inbox → <t:FolderId>.
|
||||
* Custom names (e.g. "DKV" or "INBOX/DKV") → FindFolder deep search under msgfolderroot → <t:FolderId>.
|
||||
* Searches msgfolderroot (full mailbox) so folders at root level are found, not just inbox subfolders.
|
||||
*/
|
||||
private async resolveFolderElement(config: InboxConfig): Promise<string> {
|
||||
const folderCfg = config.folder ?? 'INBOX';
|
||||
@@ -286,14 +287,20 @@ export class ExchangeInboxProvider implements InboxProvider {
|
||||
if (distinguished) {
|
||||
return `<t:DistinguishedFolderId Id="${escapeXml(distinguished)}"/>`;
|
||||
}
|
||||
// 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 `<t:DistinguishedFolderId Id="inbox"/>`;
|
||||
}
|
||||
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 `<t:DistinguishedFolderId Id="inbox"/>`;
|
||||
}
|
||||
this.logger.log(`EWS FindFolder: resolved "${displayName}" → FolderId ${folderId.slice(0, 20)}…`);
|
||||
return `<t:FolderId Id="${escapeXml(folderId)}"/>`;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user