2010-01-15 15 views
0

我試圖在c#中獲取Outlook中的特定文件夾。其他人在這裏有相同的問題Using Outlook API to get to a specific folder但使用Folders集合時我不知道如何通過文件夾集合。我的意思是,我查看了Folders集合返回的對象類型,它看起來像是一個Folders對象。但是當我嘗試在循環中使用它時,它會給我一個無效的轉換異常。我也希望我可以使用GetFolderFromID方法給它的文件夾的字符串名稱,但不希望工作......但我也找不到如何使用它的一個例子,所以我不知道我正確地編碼它。這是我嘗試過的一個例子。任何人都知道如何獲取與收件箱文件夾處於同一級別的Processed文件夾?謝謝。從Outlook使用C#獲取文件夾&GetFolderFromID EntryIdStore

 MAPIFolder oProcessed = null; 
     foreach (var folder in oNS.Folders) 
      if (folder.ToString() == "Processed") 
      { 
       oProcessed = (MAPIFolder)folder; 
      } 

     if (oProcessed == null) 
      throw new Exception("Missing processed folder."); 

回答

1

這是來自VBA的inept翻譯,但可能會提供一些想法,看到你還沒有答案。在VBA中,最好獲取收件箱的父文件夾,並在相同級別的文件夾中查找。

 Microsoft.Office.Interop.Outlook._Folders oFolders; 
     Microsoft.Office.Interop.Outlook.MAPIFolder oPublicFolder = 
      olNS.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox).Parent; 
     //Folders at Inbox level 
     oFolders = oPublicFolder.Folders; 
     foreach (Microsoft.Office.Interop.Outlook.MAPIFolder Folder in oFolders) 
     { 
      string foldername = Folder.Name; 
      if (foldername == "Test") 
      Console.Write(Folder.Name); 
     } 
3

需要通過rootFolder文件夾集合檢查的名稱來獲得根級別的郵箱文件夾的保持

Outlook.MAPIFolder rootFolder= Application.Session.DefaultStore.GetRootFolder(); 

然後循環

Outlook.MAPIFolder processedFolder = null; 
      foreach (Outlook.MAPIFolder folder in rootFolder.Folders) 
      { 
       if (folder.Name == "Processed") 
       { 
        processedFolder = folder; 
        break; 
       } 
      } 

退房http://msdn.microsoft.com/en-us/library/bb176810.aspx讓你的頭圍繞API。

馬庫斯

1

如果你有一個字符串的文件夾路徑,您可以使用此功能:

private MAPIFolder GetFolder(string folderPath, Folders folders) 
{ 
    string dir = folderPath.Substring(0, folderPath.Substring(4).IndexOf("\\") + 4); 
    try 
    { 
     foreach (MAPIFolder mf in folders) 
     { 
      if (!(mf.FullFolderPath.StartsWith(dir))) continue; 
      if (mf.FullFolderPath == folderPath) return mf; 
      else 
      { 
       MAPIFolder temp = GetFolder(folderPath, mf.Folders); 
       if (temp != null) 
        return temp; 
      } 
     } 
     return null; 
    } 
    catch { return null; } 
} 
0
Outlook.MAPIFolder rootFolder = Application.Session.DefaultStore.GetRootFolder(); 
var processedFolder = rootFolder.Folders.Cast<Outlook.MAPIFolder>().Where(r => r.Name == "Processed").FirstOrDefault();