簡體   English   中英

使用EWS從主郵箱中獲取多個郵箱

[英]Get multiple mailboxes from a master mailbox using 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("MyUser@Domain.com");
        var folderId = new FolderId(WellKnownFolderName.Inbox, userMailbox);

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

此解決方案的問題是對於3000個郵箱,然后我們必須查詢EWS的3000倍才能從每個郵箱中獲取未讀郵件(知道很多不會有未讀郵件)。

是否有一種方法可以通過一次呼叫從交換服務器的每個郵箱中獲取所有未讀郵件? 我們正在將Exchange 2013與最新的EWS配合使用。

提前致謝

我設法找到一種滿足我的要求的方法,該方法幾乎可以將所有未讀的郵件放入一個呼叫中。

這是竅門。 我在ECP中添加了一個傳輸規則,以便將每封傳入電子郵件的MyAdmin置於密件抄送中。 從那里,我根據需要在一個呼叫中處理所有郵箱的每個未讀電子郵件。 我還將在數據庫中跟蹤來自我的例程的已處理電子郵件,最終,我將創建另一個例程,該例程將銷毀我已處理的所有其他郵箱中的電子郵件。

簡單但干凈且可以工作。 希望對大家有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM