Не удается получить папки из Outlook 2016 в почтовом ящике не по умолчанию - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь составить список всех папок (чтобы в дальнейшем получать сообщения из одной определенной папки) с помощью Microsoft Office Interops.

Если я запускаю этот код с storeIdx, установленным в 1 (это мой личный почтовый ящик), он прекрасно работает, но если я пытаюсь запустить его на storeIdx 2 (который также используется в качестве общего почтового ящика)он абсолютно ничего не возвращает:

    private void ProcessMail()
    {
        Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
        _NameSpace ns = app.GetNamespace("MAPI");
        int storeIdx = 2;

        MAPIFolder inbox = ns.Stores[storeIdx].GetDefaultFolder(OlDefaultFolders.olFolderInbox);

        Console.WriteLine("Getting folders from mailbox: " + ns.Stores[storeIdx].DisplayName + " in folder " + inbox.Name +"\r\n");
        Console.WriteLine("FOLDERS:\r\n");

        foreach (MAPIFolder f in inbox.Folders)
        {
            Console.WriteLine(f.Name + " (" + f.FullFolderPath + ")");
        }
    }

Я пробовал несколько разных вещей после прочтения на разных сайтах (в том числе MSDN), но он просто не показывает мне подпапки в папке входящих сообщений общего почтового ящика,В Outlook я могу видеть их очень хорошо и работать с ними.

Все почтовые ящики находятся на одном сервере Exchange.

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Я думаю, что коллекция Stores GetNamespace obj представляет все хранилища, доступные в текущем профиле (текущем сеансе).Вы можете использовать NameSpace.GetSharedDefaultFolder для получения общего почтового ящика.

Ссылочная ссылка: Получить список всех папок и подпапок Outlook

0 голосов
/ 12 октября 2018

Вы можете получить все папки следующим образом:

Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
List<Folder> folders = new List<Folder>();
foreach(Folder f in app.Session.Folders)
{
    if(ff.DefaultMessageClass.Contains("IPM.Post")
        folders.Add(f);
    folders.AddRange(GetSubFolders(f));
    // Dont forget to release the object cause Outlook don't like too many open obejcts
    Marshal.ReleaseComObject(f);
}

GetSubFolders:

public List<Folder> GetSubFolders(Folder f)
{
    List<Folder> folders = new List<Folder>();
    if(f.Folders.Count > 0)
    {
        foreach(Folder ff in f.Folders)
        {
            if(ff.DefaultMessageClass.Contains("IPM.Post")
                folders.Add(ff);
            folders.AddRange(GetSubFolders(ff));
            Marshal.ReleasComObject(ff);
        }
    }
    return folders;
}
...