2015-02-23 84 views
0

我當前想要將所有電子郵件(不管它們在哪個文件夾中)下載到我的SQL Server數據庫。通過EWS下載所有電子郵件

現在,雖然我知道如何搜索電子郵件或訂閱流式通知,但我還沒有學習如何將EWS中的所有消息同步到我的數據庫。

var emailMessages = GetItems<MSEmailMessage>(WellKnownFolderName.MsgFolderRoot); 
foreach (var emailMessage in emailMessages) 
{ 
    Debug.WriteLine(emailMessage.Subject); 
} 

private IList<T> GetItems<T>(WellKnownFolderName wellKnownFolderName) where T : Item 
{ 
    IList<T> result = new List<T>(); 

    Folder folder = Folder.Bind(_exchangeService, wellKnownFolderName); 
    if (folder.TotalCount > 0) 
    { 
     ItemView view = new ItemView(folder.TotalCount); 
     FindItemsResults<Item> items = _exchangeService.FindItems(wellKnownFolderName, view); 
     foreach (var resultItem in items.OfType<T>()) 
     { 
      result.Add(resultItem); 
     } 
    } 

    return result; 
} 

這將返回0電子郵件(它甚至初始化一個新ItemView前檢查的folder.TotalCount之前拋出異常......)。

雖然檢查WellKnownFolderName.Inbox從收件箱中返回電子郵件,但它不允許我查詢子文件夾來同步整個郵件。

我錯過了什麼?

回答

1

您可以構建一個搜索郵件的文件夾列表。然後遍歷每個文件夾並獲取該文件夾中的所有電子郵件。

在下面的代碼片段中,我們可以創建一個folderSearchFilter並將FolderTraversal設置爲Deep,它將掃描目標文件夾的所有子文件夾。然後,我們可以將此過濾器應用到兩大知名文件夾InboxSentItems

一旦你有文件夾的索引列表,那麼你可以使用自己的代碼來獲取所有從該文件夾中的郵件。

var view = new FolderView(int.MaxValue) 
{ 
    PropertySet = new PropertySet(BasePropertySet.FirstClassProperties) { FolderSchema.DisplayName } 
}; 
SearchFilter foldersearchFilter = new SearchFilter.IsGreaterThan(FolderSchema.TotalCount, 0); 
view.Traversal = FolderTraversal.Deep; 
List<Folder> searchFolders; 
try 
{ 
    searchFolders = new List<Folder> 
      { 
       Folder.Bind(ExchangeService, WellKnownFolderName.Inbox), 
       Folder.Bind(ExchangeService, WellKnownFolderName.SentItems) 
      }; 
} 
catch (ServiceResponseException e) {} 

searchFolders.AddRange(ExchangeService.FindFolders(WellKnownFolderName.Inbox, foldersearchFilter, view).Folders); 
searchFolders.AddRange(ExchangeService.FindFolders(WellKnownFolderName.SentItems, foldersearchFilter, view).Folders); 

var results = new List<Item>(); 
foreach (var searchFolder in searchFolders) 
{ 
    //Get all emails in this folder 
} 
+0

謝謝,現在我開始瞭解與EWS的演習:) – SeToY 2015-02-23 20:55:15

0

對,根文件夾中可能有0條消息。當您在文件夾中執行FindItems時,結果不會從子文件夾中冒出來。如果你想得到他們的消息,你需要迭代每個文件夾。