使用C#& amp;从Outlook获取文件夹GetFolderFromID EntryIdStore

时间:2010-01-15 13:29:15

标签: outlook

我正在尝试使用c#获取outlook中的特定文件夹。其他人在Using Outlook API to get to a specific folder遇到了同样的问题,但在使用Folders集合时,我不知道如何通过文件夹集合。我的意思是,我已经查看了Folders集合返回的对象类型,它看起来像是一个Folders对象。但是当我尝试在循环中使用它时,它会给我一个无效的强制转换异常。我也希望我可以使用GetFolderFromID方法为它提供文件夹的字符串名称,但是也不想工作......但是我也找不到如何使用它的例子所以我不确定我正确编码。这是我尝试过的一个例子。任何人都知道如何获取与Inbox文件夹位于同一级别的Processed文件夹?感谢。

        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.");

4 个答案:

答案 0 :(得分:5)

您需要获取根级邮箱文件夹

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

然后循环遍历rootFolder文件夹集合,检查名称

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 :(得分:1)

这是来自VBA的无效翻译,但可能提供一些想法,看到你还没有答案。在VBA中,最好获取Inbox的父文件夹,并查看相同级别的文件夹。

        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);
        }

答案 2 :(得分: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; }
}

答案 3 :(得分:0)

Outlook.MAPIFolder rootFolder = Application.Session.DefaultStore.GetRootFolder();
var processedFolder = rootFolder.Folders.Cast<Outlook.MAPIFolder>().Where(r => r.Name == "Processed").FirstOrDefault();