2015-04-05 4 views
1

Я пытаюсь прочитать все календари, которые у меня есть в моем Outlook с C#, но у меня есть проблема с доступом к тем, которые я создаю внутри Outlook (правый клик -> новый календарь).C# - Outlook - получить доступ к новому календарю

Я пытаюсь получить их:

Outlook.Application app = new Outlook.Application(); 
Outlook.NameSpace ns = app.GetNamespace("MAPI"); 
Outlook.MAPIFolder folderss = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar); 

или:

Application.Session.Stores 

, но ни один из них не держит мой новый календарь.

У вас есть идея, как с ними связаться?

ответ

1

Календари только Folders с DefaultItemTypeOlItemType.olAppointmentItem.
Они могут быть созданы в любом из Outlook Stores на любом уровне иерархии Folder.

Предполагая, что календарь был создан в корневой папке одного из ваших Stores, следующий C# кода будет найти:

void findMyCalendar(String name) 
    { 
     string path = null; 

     Outlook.Application app = new Outlook.Application(); 
     Outlook.NameSpace ns = app.GetNamespace("MAPI"); 

     // there may be more than one Store 
     // each .ost and .pst file is a Store 
     Outlook.Folders folders = ns.Folders; 

     foreach (Outlook.Folder folder in folders) 
     { 
      Outlook.MAPIFolder root = folder; 
      path = findCalendar(root, name); 

      if (path != null) 
      { 
       break; 
      } 
     } 

     MessageBox.Show(path ?? "not found!"); 
    } 

// non-recursive search for just one level 
public string findCalendar(MAPIFolder root, string name) 
    { 
     string path = null; 

     foreach (Outlook.MAPIFolder folder in root.Folders) 
     { 
      if (folder.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase) && 
       (folder.DefaultItemType == OlItemType.olAppointmentItem)) 
      { 
       path = folder.FolderPath; 
       break; 
      } 
     } 

     return path; 
    }