在 Exchange (EWS) 中找不到文件夹:"Mailbox does not exist"

Can't find folders in Exchange (EWS) : "Mailbox does not exist"

我正在使用 EWS 和 java 从 Outlook 邮箱中检索电子邮件。

我可以毫无问题地从收件箱中提取电子邮件:

  FolderId inbox=new FolderId(WellKnownFolderName.Inbox, new Mailbox(account));

  return service.findItems(inbox, new ItemView(15))
        .getItems()
        .stream()
        .map(item -> toEmail(item))
        .collect(toList());

我现在需要查看特定的文件夹,我能找到的所有示例都是这样的:

private FolderId findSpecificFolder(ExchangeService service, String folderName) throws Exception {

    FolderView view = new FolderView(10);
    PropertySet prop= new PropertySet(BasePropertySet.IdOnly);
    prop.add(FolderSchema.DisplayName);

    view.setPropertySet(prop);
    view.setTraversal(FolderTraversal.Deep);

    FindFoldersResults findFolderResults = service.findFolders(WellKnownFolderName.Root, view);

    ...
}

但是调用 service.findFolders 会产生异常:

microsoft.exchange.webservices.data.core.exception.service.remote.ServiceResponseException: Mailbox does not exist.

at microsoft.exchange.webservices.data.core.response.ServiceResponse.internalThrowIfNecessary(ServiceResponse.java:278)
at microsoft.exchange.webservices.data.core.response.ServiceResponse.throwIfNecessary(ServiceResponse.java:267)
at microsoft.exchange.webservices.data.core.request.MultiResponseServiceRequest.execute(MultiResponseServiceRequest.java:165)
at microsoft.exchange.webservices.data.core.ExchangeService.internalFindFolders(ExchangeService.java:377)
at microsoft.exchange.webservices.data.core.ExchangeService.findFolders(ExchangeService.java:425)
at microsoft.exchange.webservices.data.core.ExchangeService.findFolders(ExchangeService.java:461)

我很困惑,因为当我刚收到收件箱内容时它工作得很好。所以邮箱确实存在!

是否有可行的替代方案?

我找到了解决方法 - 但不确定为什么初始代码不起作用。

虽然 Folder.bind 对我有用,但它有效:

private FolderId findSpecificFolder(ExchangeService service, String folderName) throws Exception {

    //reusing the Inbox FolderId that was working
    FolderId inbox=new FolderId(WellKnownFolderName.Inbox, new Mailbox(account));

    FolderView view = new FolderView(10);
    PropertySet prop= new PropertySet(BasePropertySet.IdOnly);
    prop.add(FolderSchema.DisplayName);

    view.setPropertySet(prop);
    view.setTraversal(FolderTraversal.Deep);

    //Binding the inboxFolder
    Folder inboxFolder=Folder.bind(service, inbox);

    FindFoldersResults subFolders=inboxFolder.findFolders(view);

    for (Folder subFolder : subFolders.getFolders()){
       ...
    } 
}