获得使用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。
在此先感谢
答
我设法找到被满足我的要求-almost-每封未读邮件获得到一个单一的通话方式。
这里的窍门。我在ECP中添加了一个传输规则,以将每个收到的电子邮件的MyAdmin都放入密件抄送中。从那里,我按照通话的方式处理所有邮箱的每封未读电子邮件。我还会跟踪数据库中例行程序的处理过的电子邮件,并且在一天结束时,我将创建另一个例程,以销毁我处理的所有其他邮箱中的电子邮件。
简单,但干净和工作。希望它会帮助人们。
我不认为它是可能的。我认为你必须为每个用户提供服务。 SO中有按钮,我想继续观看。上投了反对票。 – Seabizkit
这里是如何关注SO中的问题。感谢您的支持。 http://meta.stackexchange.com/questions/86877/how-to-follow-a-question-on-stackoverflow –
可以使用电子发现做多邮箱搜索https://msdn.microsoft.com/en- us/library/office/jj190897(v = exchg.150).aspx但是IsRead没有被索引,所以它不是你可以做的查询,所以你唯一的选择是做3000个请求。 –