2010-01-15 90 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();