ExchangeService.FindFolders 未返回任何文件夹
ExchangeService.FindFolders not returning any folders
我有一个循环遍历邮箱中多个已定义文件夹的功能。每个文件夹都包含另一个名为 "Complete" 的文件夹。下面的代码找到这个 "Complete" 文件夹并获取它的 FolderId
.
当 运行 时,代码工作正常,然后一段时间后 FindFoldersResults findFolderProcessed = service.FindFolders(folder.Id, new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Complete"), view);
returns 没有文件夹。单步执行代码,似乎一切正常,但 findFolderProcessed.Folders
是空的。
为什么它适用于多个文件夹然后停止?
ServicePointManager.ServerCertificateValidationCallback =
((sender, certificate, chain, sslPolicyErrors) => true);
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
service.Credentials = new NetworkCredential("xxx", "xxx", "xxx");
service.AutodiscoverUrl("xxx@xxx.com");
service.Url = new Uri("https://xxx/ews/exchange.asmx");
FolderView view = new FolderView(int.MaxValue);
view.PropertySet = new PropertySet(BasePropertySet.IdOnly);
view.PropertySet.Add(FolderSchema.DisplayName);
view.Traversal = FolderTraversal.Deep;
SearchFilter[] parameters = new SearchFilter[3];
parameters[0] = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "x1");
parameters[1] = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "x2");
parameters[2] = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "x3");
SearchFilter.SearchFilterCollection filterCollection = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, parameters);
FindFoldersResults findFolder = service.FindFolders(new FolderId(WellKnownFolderName.Inbox, new Mailbox("xxx@xxx.com")), filterCollection, view);
foreach (Folder folder in findFolder.Folders)
{
//FindFoldersResults tempResults = service.FindFolders(folder.Id, view);
FindFoldersResults findFolderProcessed = service.FindFolders(folder.Id, new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Complete"), view);
FolderId ProcessedFolderID = findFolderProcessed.Folders[0].Id;
//Other Processing
}
编辑:示例文件夹结构
x1
-> Complete
x2
-> Complete
x3
-> Complete
...
xn
-> Complete
大约有 50 个文件夹,结构完全相同。
所以问题是 service.FindFolders
返回了重复的文件夹,并且循环试图处理这些文件夹两次。所以它第一次正确地处理了文件夹,但第二次它导致了这个问题。
我不知道为什么它会返回重复项,但为了修复它,我只是使用下面的代码代替 foreach (Folder folder in findFolder.Folders)
:
来删除 findFolder
var folderCollection = findFolder.Folders.GroupBy(x => x.DisplayName).Select(g => g.First());
foreach (Folder folder in folderCollection)
如果有人知道为什么文件夹会在最初的 service.FindFolders
调用中重复,请随时在下面发表评论。
我有一个循环遍历邮箱中多个已定义文件夹的功能。每个文件夹都包含另一个名为 "Complete" 的文件夹。下面的代码找到这个 "Complete" 文件夹并获取它的 FolderId
.
当 运行 时,代码工作正常,然后一段时间后 FindFoldersResults findFolderProcessed = service.FindFolders(folder.Id, new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Complete"), view);
returns 没有文件夹。单步执行代码,似乎一切正常,但 findFolderProcessed.Folders
是空的。
为什么它适用于多个文件夹然后停止?
ServicePointManager.ServerCertificateValidationCallback =
((sender, certificate, chain, sslPolicyErrors) => true);
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
service.Credentials = new NetworkCredential("xxx", "xxx", "xxx");
service.AutodiscoverUrl("xxx@xxx.com");
service.Url = new Uri("https://xxx/ews/exchange.asmx");
FolderView view = new FolderView(int.MaxValue);
view.PropertySet = new PropertySet(BasePropertySet.IdOnly);
view.PropertySet.Add(FolderSchema.DisplayName);
view.Traversal = FolderTraversal.Deep;
SearchFilter[] parameters = new SearchFilter[3];
parameters[0] = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "x1");
parameters[1] = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "x2");
parameters[2] = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "x3");
SearchFilter.SearchFilterCollection filterCollection = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, parameters);
FindFoldersResults findFolder = service.FindFolders(new FolderId(WellKnownFolderName.Inbox, new Mailbox("xxx@xxx.com")), filterCollection, view);
foreach (Folder folder in findFolder.Folders)
{
//FindFoldersResults tempResults = service.FindFolders(folder.Id, view);
FindFoldersResults findFolderProcessed = service.FindFolders(folder.Id, new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Complete"), view);
FolderId ProcessedFolderID = findFolderProcessed.Folders[0].Id;
//Other Processing
}
编辑:示例文件夹结构
x1
-> Complete
x2
-> Complete
x3
-> Complete
...
xn
-> Complete
大约有 50 个文件夹,结构完全相同。
所以问题是 service.FindFolders
返回了重复的文件夹,并且循环试图处理这些文件夹两次。所以它第一次正确地处理了文件夹,但第二次它导致了这个问题。
我不知道为什么它会返回重复项,但为了修复它,我只是使用下面的代码代替 foreach (Folder folder in findFolder.Folders)
:
findFolder
var folderCollection = findFolder.Folders.GroupBy(x => x.DisplayName).Select(g => g.First());
foreach (Folder folder in folderCollection)
如果有人知道为什么文件夹会在最初的 service.FindFolders
调用中重复,请随时在下面发表评论。