在 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()){
...
}
}
我正在使用 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()){
...
}
}