【问题标题】:Check if Outlook MAPIFolder is visible?检查 Outlook MAPIFolder 是否可见?
【发布时间】:2022-04-20 07:51:02
【问题描述】:

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

  • Yammer 根
  • 同步问题
  • 订阅

这些文件夹在 Outlook 中不可见。我喜欢检查我的代码文件夹是否可见,但我没有找到像 Hidden 或 Visible 这样的属性。

MAPIFolder 文件夹具有如下属性:

  • folder.DefaultItemType
  • 文件夹名称

但不隐藏。

如何在我的 c# 插件中找到文件夹是否隐藏?

【问题讨论】:

    标签: c# outlook-addin


    【解决方案1】:

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

    您可以使用 OutlookSpy(我是其作者)查看该(和其他)属性 - 单击 IMAPIFolder 按钮。

    【讨论】:

      【解决方案2】:

      至少在我的机器上,我从未为所有文件夹检索到 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");
      

      【讨论】:

      • 你迟到的答案并不比已经接受的答案好
      • Stephan,我并不是说答案更好。我只是想为遇到类似 PR_ATTRIBUTE_HIDDEN 问题的开发人员提供一种额外的方法来确定文件夹是否可见。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 2015-02-21
      • 2014-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多