C# - Outlook - 获取对新日历的访问权限

C# - Outlook - get access to a new calendar

我正在尝试使用 C# 读取 outlook 中的所有日历,但我无法访问我在 outlook 中创建的日历(右键单击 -> 新日历)。

我正在尝试通过以下方式获取它们:

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

或通过:

Application.Session.Stores

但其中 none 持有我的新日历。

您知道如何联系他们吗?

日历只是 FoldersDefaultItemType OlItemType.olAppointmentItem
它们可以在任何 Outlook StoresFolder 层次结构的任何级别上创建。

假设日历是在您的 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;
    }