获得使用EWS

问题描述:

我们希望能够从包含在我们的Exchange服务器的所有邮箱获得封未读邮件的主邮箱的多个邮箱。从那里,我们将在我们的应用程序中处理它们,然后删除它们。未读邮件的数量将一直很小。获得使用EWS

我们的第一个想法是创建一个主邮箱,给他充分的访问(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("[email protected]"); 
     var folderId = new FolderId(WellKnownFolderName.Inbox, userMailbox); 

     //search all items in Inbox 
     var userItems = service.FindItems(folderId, unreadFilter, viewEmails); 

这种解决方案的问题是3000个邮箱,我们必须再查询3000次EWS从每个邮箱中获取未读邮件(知道很多人不会有未读的邮件)。

有没有一种方法来获得,在单呼,从Exchange服务器的每个邮箱中的所有封未读邮件?我们正在使用Exchange 2013和最新的EWS。

在此先感谢

+0

我不认为它是可能的。我认为你必须为每个用户提供服务。 SO中有按钮,我想继续观看。上投了反对票。 – Seabizkit

+0

这里是如何关注SO中的问题。感谢您的支持。 http://meta.stackexchange.com/questions/86877/how-to-follow-a-question-on-stackoverflow –

+0

可以使用电子发现做多邮箱搜索https://msdn.microsoft.com/en- us/library/office/jj190897(v = exchg.150).aspx但是IsRead没有被索引,所以它不是你可以做的查询,所以你唯一的选择是做3000个请求。 –

我设法找到被满足我的要求-almost-每封未读邮件获得到一个单一的通话方式。

这里的窍门。我在ECP中添加了一个传输规则,以将每个收到的电子邮件的MyAdmin都放入密件抄送中。从那里,我按照通话的方式处理所有邮箱的每封未读电子邮件。我还会跟踪数据库中例行程序的处理过的电子邮件,并且在一天结束时,我将创建另一个例程,以销毁我处理的所有其他邮箱中的电子邮件。

简单,但干净和工作。希望它会帮助人们。