【发布时间】:2015-10-15 14:08:37
【问题描述】:
我们希望能够从我们交换服务器中包含的所有邮箱中获取未读邮件。从那里,我们将在我们的应用程序中处理它们,然后将它们删除。未读邮件的数量总是很小的比例。
我们的第一个想法是创建一个主邮箱,让他(通过 EPS)完全访问其他邮箱,并通过 EWS 获取未读邮件。我们试过这个:
//Define the service
ExchangeService service = new ExchangeService(SERVICE_VERSION);
service.Url = new Uri(SERVICE_URL);
service.Credentials = new WebCredentials("MyAdmin", "MyPassword");
//define our search
FolderView viewFolders = new FolderView(int.MaxValue) { Traversal = FolderTraversal.Deep, PropertySet = new PropertySet(BasePropertySet.IdOnly) };
ItemView viewEmails = new ItemView(int.MaxValue) { PropertySet = new PropertySet(BasePropertySet.IdOnly) };
SearchFilter unreadFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
//search all items in Inbox and subfolders
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Root, unreadFilter, viewEmails);
//bind the result
ServiceResponseCollection<GetItemResponse> responseList =
service.BindToItems(findResults.Select(item => item.Id), new PropertySet(BasePropertySet.FirstClassProperties,EmailMessageSchema.ReceivedBy, EmailMessageSchema.From, EmailMessageSchema.Subject, EmailMessageSchema.Attachments));
但是,这只会从 MyAdmin 邮箱中获取未读邮件。经过进一步调查,我们发现这种方式可以从另一个特定邮箱中获取未读邮件:
//Define the service
ExchangeService service = new ExchangeService(SERVICE_VERSION);
service.Url = new Uri(SERVICE_URL);
service.Credentials = new WebCredentials("MyAdmin", "MyPassword");
//define our search
FolderView viewFolders = new FolderView(int.MaxValue) { Traversal = FolderTraversal.Deep, PropertySet = new PropertySet(BasePropertySet.IdOnly) };
ItemView viewEmails = new ItemView(int.MaxValue) { PropertySet = new PropertySet(BasePropertySet.IdOnly) };
SearchFilter unreadFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
//define the user mailbox
var userMailbox = new Mailbox("MyUser@Domain.com");
var folderId = new FolderId(WellKnownFolderName.Inbox, userMailbox);
//search all items in Inbox
var userItems = service.FindItems(folderId, unreadFilter, viewEmails);
这个方案的问题是针对3000个邮箱,然后我们必须查询3000次EWS来获取每个邮箱的未读邮件(知道很多不会有未读邮件)。
有没有办法在一次调用中从交换服务器的每个邮箱中获取所有未读邮件?我们正在使用带有最新 EWS 的 Exchange 2013。
提前致谢
【问题讨论】:
-
我认为不可能。我认为您必须为每个用户提供服务。 SO中有没有关注按钮,我想继续看这个。投票赞成。
-
这里是如何在 SO 中关注问题。感谢您的支持。 meta.stackexchange.com/questions/86877/…
-
您可以使用 eDiscovery msdn.microsoft.com/en-us/library/office/… 进行多邮箱搜索,但是 IsRead 未编入索引,因此您无法进行查询,因此您唯一的选择是执行 3000 个请求。