检查Outlook MAPIFolder是否可见?

时间:2018-05-17 04:46:34

标签: c# outlook-addin

当我遍历所有Outlook文件夹(在C#加载项中)时,我看到的文件夹名称如下:

  • Yammer Root
  • 同步问题
  • 订阅

这些文件夹在Outlook中不可见。我喜欢检查我的代码是否可见文件夹但我找不到隐藏或可见的属性。

MAPIFolder文件夹具有以下属性:

  • folder.DefaultItemType
  • folder.Name

但没有隐藏。

如果文件夹被隐藏,我怎样才能在我的c#加载项中找到?

2 个答案:

答案 0 :(得分:2)

您需要阅读PR_ATTR_HIDDEN MAPI属性(DASL名称http://schemas.microsoft.com/mapi/proptag/0x10F4000B)。您可以使用MAPIFolder.PropertyAccessor.GetProperty阅读它。

您可以使用OutlookSpy(单击IMAPIFolder按钮)查看该(和其他)属性

答案 1 :(得分:0)

至少在我的机器上,我从未检索过所有文件夹的 PR_ATTR_HIDDEN 值。虽然在 OutlookSpy 中隐藏文件夹的值为 true,但我找不到原因。

代码:

        var rootFolder = outlook.Session.DefaultStore.GetRootFolder();
        foreach (Folder folder in rootFolder.Folders)
        {
            try
            {
                bool isHidden = folder.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x10F4000B");
                // never reach this line
            }
            catch (System.Exception ex)
            {
                // always exception: value is not available
            }
        }

我的解决方法:如果您想检索 Outlook 中显示的文件夹,您可以使用 PR_CONTAINER_CLASS_W 并将其与 IPF.Note 或 IPF.Imap 进行比较。

示例:

        const string PR_CONTAINER_CLASS_W = "http://schemas.microsoft.com/mapi/proptag/0x3613001F";

        string containerClass = folder.PropertyAccessor.GetProperty(PR_CONTAINER_CLASS_W);
        bool isVisible = string.Equals(containerClass, "IPF.Note")|| string.Equals(containerClass, "IPF.Imap");