Как перебирать каждый почтовый элемент в каждой папке, надстройка Outlook 2010

Это то, что у меня есть до сих пор (не работает)

private void ScanAllMailItems()
{
    Outlook.Folders folders = _outlookNameSpace.Folders;
    foreach (Outlook.Folder folder in folders)
    {
        foreach (Outlook.MailItem m in folder.Items)
        {
            ScanMailBody(m);
        }
    }
}

Исключения нет, кажется, папка.items всегда пуста. Сам почтовый ящик Outlook имеет 10 папок, в каждой из которых находится от 20 до 300 писем.


person theUser    schedule 27.02.2014    source источник
comment
Есть ли исключение, можете ли вы объяснить, что именно происходит?   -  person Simon    schedule 27.02.2014
comment
Исключения нет, кажется, папка.items всегда пуста.   -  person theUser    schedule 27.02.2014
comment
По памяти я не думаю, что NameSpace.Folders — это правильный способ получить корневую папку вашего почтового ящика. Возможно, посмотрите здесь и попробуйте, как было предложено: stackoverflow.com /вопросы/861370/   -  person Simon    schedule 27.02.2014
comment
Вы получаете правильные данные в переменной «папки»?   -  person Microsoft DN    schedule 27.02.2014


Ответы (1)


Решено так, спасибо за ссылку Саймон.

    private void ScanAllMailItems()
    {
        var theRootFolder = (Outlook.Folder)_outlookNameSpace.DefaultStore.GetRootFolder();
        RecurseThroughFolders(theRootFolder, 0);
    }

    private void RecurseThroughFolders(Outlook.Folder theRootFolder, int depth)
    {
        if (theRootFolder.DefaultItemType != Outlook.OlItemType.olMailItem)
            return;

        foreach (object item in theRootFolder.Items)
        {
            var mailItem = item as Outlook.MailItem;
            if (mailItem != null)
            {
                var mi = mailItem;
                ScanMailBody(mi);
            }
        }

        foreach (Outlook.Folder folder in theRootFolder.Folders)
        {
            RecurseThroughFolders(folder, depth + 1);
        }
    }
person theUser    schedule 27.02.2014
comment
Проверка на != Outlook.OlItemType.olMailItem является хорошим дополнением к примеру MSDN здесь: msdn.microsoft.com/en-us/library/office/ff184607.aspx - person jkamdjou; 17.05.2017