Получить папку из Outlook, используя C # & GetFolderFromID EntryIdStore - PullRequest
0 голосов
/ 15 января 2010

Я пытаюсь получить определенную папку в Outlook с помощью C #. У кого-то здесь была такая же проблема Использование Outlook API для доступа к определенной папке , но при использовании коллекции папок я не уверен, как пройти через коллекцию папок. Я имею в виду, что я посмотрел на тип объекта, который возвращает коллекция Folders, и похоже, что это объект Folders. Но когда я пытаюсь использовать это в цикле, это дает мне недопустимое исключение приведения. Я также надеялся, что смогу использовать метод GetFolderFromID, чтобы дать ему строковое имя папки, но он тоже не хочет работать ... но я также не могу найти пример того, как его использовать, поэтому я не уверен Я правильно его кодирую. Вот пример того, что я попробовал. Кто-нибудь знает, как получить папку «Обработанные», которая находится на том же уровне, что и папка «Входящие»? Спасибо.

        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 ]

5 голосов
/ 18 января 2010

вам нужно получить папку почтового ящика корневого уровня

 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.

Marcus

1 голос
/ 05 мая 2010

Если у вас есть путь к папке в виде строки, вы можете использовать эту функцию:

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; }
}
1 голос
/ 15 января 2010

Это неумелый перевод с 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);
        }
0 голосов
/ 22 февраля 2015
Outlook.MAPIFolder rootFolder = Application.Session.DefaultStore.GetRootFolder();
var processedFolder = rootFolder.Folders.Cast<Outlook.MAPIFolder>().Where(r => r.Name == "Processed").FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...