搜索 Exchange 服务器上的特定文件夹
Search specific folder on Exchange Server
我有一个代码块,当前从通用 "Inbox" 文件夹中读取交换服务器上的所有电子邮件。下面一行是访问该特定文件夹的内容
FindItemsResults<Item> findResults = exchange.FindItems(WellKnownFolderName.Inbox, new ItemView(250));
问题
是否可以修改此代码以便我可以搜索用户创建的文件夹而不是通用收件箱?例如,我创建了一个名为 "Test Folder" 的文件夹,我希望能够阅读此处的所有电子邮件。
我已经尝试添加搜索过滤器,但是 returns 目前没有结果:
SearchFilter searchFilter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Test Folder");
FindItemsResults<Item> findResults = exchange.FindItems(WellKnownFolderName.Inbox, searchFilter, new ItemView(250));
您需要先找到用户创建的相关文件夹的 FolderId,然后您可以在服务 class 的 FindItem 方法中使用 FolderId 或在文件夹本身上使用 FindItem 方法。例如,要找到用户创建的文件夹,您可以将其转换为路径并搜索该路径
internal static Folder GetFolderFromPath(ExchangeService service,String MailboxName,String FolderPath)
{
FolderId folderid = new FolderId(WellKnownFolderName.MsgFolderRoot,MailboxName);
Folder tfTargetFolder = Folder.Bind(service,folderid);
PropertySet psPropset = new PropertySet(BasePropertySet.FirstClassProperties);
String[] fldArray = FolderPath.Split('\');
for (Int32 lint = 1; lint < fldArray.Length; lint++) {
FolderView fvFolderView = new FolderView(1);
fvFolderView.PropertySet = psPropset;
SearchFilter SfSearchFilter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName,fldArray[lint]);
FindFoldersResults findFolderResults = service.FindFolders(tfTargetFolder.Id,SfSearchFilter,fvFolderView);
if (findFolderResults.TotalCount > 0){
foreach(Folder folder in findFolderResults.Folders){
tfTargetFolder = folder;
}
}
else{
tfTargetFolder = null;
break;
}
}
if (tfTargetFolder != null)
{
return tfTargetFolder;
}
else
{
throw new Exception("Folder Not found");
}
}
因此,如果文件夹在收件箱中,您将使用
GetFolderFromPath(service,"mailbox@domaim.com","\Inbox\folder") 然后应该return那个文件夹。
我有一个代码块,当前从通用 "Inbox" 文件夹中读取交换服务器上的所有电子邮件。下面一行是访问该特定文件夹的内容
FindItemsResults<Item> findResults = exchange.FindItems(WellKnownFolderName.Inbox, new ItemView(250));
问题 是否可以修改此代码以便我可以搜索用户创建的文件夹而不是通用收件箱?例如,我创建了一个名为 "Test Folder" 的文件夹,我希望能够阅读此处的所有电子邮件。
我已经尝试添加搜索过滤器,但是 returns 目前没有结果:
SearchFilter searchFilter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Test Folder");
FindItemsResults<Item> findResults = exchange.FindItems(WellKnownFolderName.Inbox, searchFilter, new ItemView(250));
您需要先找到用户创建的相关文件夹的 FolderId,然后您可以在服务 class 的 FindItem 方法中使用 FolderId 或在文件夹本身上使用 FindItem 方法。例如,要找到用户创建的文件夹,您可以将其转换为路径并搜索该路径
internal static Folder GetFolderFromPath(ExchangeService service,String MailboxName,String FolderPath)
{
FolderId folderid = new FolderId(WellKnownFolderName.MsgFolderRoot,MailboxName);
Folder tfTargetFolder = Folder.Bind(service,folderid);
PropertySet psPropset = new PropertySet(BasePropertySet.FirstClassProperties);
String[] fldArray = FolderPath.Split('\');
for (Int32 lint = 1; lint < fldArray.Length; lint++) {
FolderView fvFolderView = new FolderView(1);
fvFolderView.PropertySet = psPropset;
SearchFilter SfSearchFilter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName,fldArray[lint]);
FindFoldersResults findFolderResults = service.FindFolders(tfTargetFolder.Id,SfSearchFilter,fvFolderView);
if (findFolderResults.TotalCount > 0){
foreach(Folder folder in findFolderResults.Folders){
tfTargetFolder = folder;
}
}
else{
tfTargetFolder = null;
break;
}
}
if (tfTargetFolder != null)
{
return tfTargetFolder;
}
else
{
throw new Exception("Folder Not found");
}
}
因此,如果文件夹在收件箱中,您将使用
GetFolderFromPath(service,"mailbox@domaim.com","\Inbox\folder") 然后应该return那个文件夹。