我们希望能够从我们的交换服务器中包含的所有邮箱中获得未读邮件。然后,我们将在应用程序中处理它们,然后删除它们。未读邮件的数量总是占很小的比例。
我们的第一个想法是创建一个主邮箱,让他完全访问其他邮箱(使用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才能从每个邮箱获得未读邮件(知道许多邮箱不会有未读邮件)。
是否有办法在一个电话中从exchange服务器的每个邮箱获取所有未读邮件?我们正在使用exchange 2013与最新的EWS。
提前感谢
发布于 2015-10-19 13:31:26
我设法找到了一种方式来满足我的要求--几乎--把所有未读的邮件都接到一个电话。
诀窍是这样的。我添加了一个传输规则与ECP,使MyAdmin在密件抄送每收到的电子邮件。从那里,我处理一个电话,根据需要,所有邮箱的未读电子邮件。我还会记录我在数据库中处理过的电子邮件,最后,我会创建另一个程序来销毁我处理过的所有其他邮箱中的电子邮件。
简单,但干净,工作。希望它能帮助人们。
https://stackoverflow.com/questions/33150739
复制相似问题