Как получить непрочитанную почту из определенной папки

#c# #outlook-2007

#c# #outlook-2007

Вопрос:

Я использую приведенный ниже код для проверки непрочитанной почты из Outlook, и все работает нормально для папки «Входящие» по умолчанию

  Microsoft.Office.Interop.Outlook.Application oApp;
    Microsoft.Office.Interop.Outlook._NameSpace oNS;
    Microsoft.Office.Interop.Outlook.MAPIFolder oFolder;
    Microsoft.Office.Interop.Outlook._Explorer oExp;

    oApp = new Microsoft.Office.Interop.Outlook.Application();
    oNS = (Microsoft.Office.Interop.Outlook._NameSpace)oApp.GetNamespace("MAPI");

    oFolder = oNS.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
    oExp = oFolder.GetExplorer(false);
    oNS.Logon(Missing.Value, Missing.Value, false, true);
    Microsoft.Office.Interop.Outlook.Items items = oFolder.Items;

    foreach (Object mail in items)
    {
        if ((mail as Microsoft.Office.Interop.Outlook.MailItem) != null amp;amp; (mail as Microsoft.Office.Interop.Outlook.MailItem).UnRead == true)
        {
           string sasd= (mail as OutLook.MailItem).Subject.ToString();

        }
    }
  

Но я хочу проверить другую папку [которую я создал [Name = «Inbox_Personal»]]. Как я могу это сделать?

Редактировать 1

Мы будем признательны за любое предложение или ссылку на руководство.

Ответ №1:

Я использую нечто подобное следующему для доступа к различным учетным записям в Outlook (2007 и выше; хранилища до 2007 года не существовали, и вам просто нужно посмотреть папки)

 Microsoft.Office.Interop.Outlook.Application oApp;
Microsoft.Office.Interop.Outlook.NameSapce oNS = oApp.GetNameSpace(“Mapi”);
foreach(Microsoft.Office.Interop.Outlook.Store oAccounts in oNS.Stores)
{ 
    // get the right account:
    Microsoft.Office.Interop.Outlook.Store oDesiredAccount;
    foreach(Microsoft.Office.Interop.Outlook.Store oAccount in oAccounts)
    {
        if(oAccount.DisplayName.ToLower.Equals(“<<Name of Account>>”)
        {
            oDesiredAccount = oAccount;
        }
    }

    // do stuff with the account
    Microsoft.Office.Interop.Outlook.MAPIFolder root = oAccount.GetRootFolder();
    // ....
}
  

Ответ №2:

 var fld = (Outlook.Folder)app.Session.GetFolderFromID("Inbox_Personal", storeID);
  

Я не могу вспомнить, откуда взять идентификатор хранилища, но он должен быть сохранен в вашем объекте сеанса или объекте папки по умолчанию.

РЕДАКТИРОВАТЬ Сейчас я посмотрел в проекте: StoreID в GetFolderFromID необязателен (тип.отсутствует).

Идентификатор хранилища по умолчанию можно найти здесь:

 app.Session.DefaultStore.StoreID
  

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook._namespace.defaultstore(v=office.12).aspx

Комментарии:

1. Я застрял на идентификаторе хранилища … 🙁

2. Я не получаю свойство DefaultStore для oApp.Session .

3. Должно быть там. Или попробуйте это без DefaultStoreID