Outlook 如何显示除嵌入图像以外的任何附件的回形针图标?

How Outlook shows the PaperClip icon for any attachment other than embedded images?

对于我的用例,我需要查明 outlook 中的邮件项目是否有任何嵌入式图像作为附件。我正在使用 Outlook 2013+ 版本。据我了解,对于所有其他嵌入式附件,它们只能以富文本格式添加,并且 Outlook 将它们标记为附件(标记为 PaperClip 图标)。但是,如果邮件仅包含 HTML 格式的嵌入图像,则回形针图标不会出现。如果我对此观察有误,请随时指出我。

但我的问题是,outlook 本身是如何决定和显示回形针图标的?我使用了 Outlook Spy,但这些邮件的 PR_HasAttach 设置为 true。我还阅读了其他解决方案,其中人们指出您可以尝试在 HTML 邮件正文中找到大部分有效的标签。但是有没有人想过 PaperClip 图标?

我有这个疑问,因为当我应用 DASL 过滤器 urn:schemas:httpmail:hasattachment = true 时,查询会过滤掉此类邮件。如果您在 outlook 本身中使用 has attachments 过滤器,也会发生同样的事情。但是,如果我 select 相同的邮件项目,并尝试通过代码或 Outlook Spy 探索这个 属性,它就会成真。这就是为什么我认为它可能与图标有关或者至少如果我能找到设置图标的 属性。

编辑 1: 当我使用以下代码时,它不适用于嵌入或隐藏的附件。对于其他人来说它有效。

IEnumerator eNum = listOfSearchedOutlookItems.GetEnumerator();
while (eNum.MoveNext())
{
      Outlook.MailItem mailItem;
      try
      {
          mailItem = (Outlook.MailItem)eNum.Current;
          bool b = mailItem.PropertyAccessor.GetProperty(@"http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/8514000B");
       }
       catch
       {
          continue;
       }
  }

然而奇怪的是,以下适用于所有情况(与我测试过的一样多)。因此,由于德米特里的回答,这个问题在某种程度上得到了解决。但是还是想知道为什么上一个不行。

Outlook.Table table = MyFolder.GetTable(SomeFilterIfNeeded);
table.Columns.RemoveAll();
table.Columns.Add(@"http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/8514000B");

while (!table.EndOfTable)
{
     Outlook.Row nextRow = table.GetNextRow();
     bool b = (bool)nextRow[@"http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/8514000B"];
 }

为了隐藏回形针图标,Outlook 设置 SmartNoAttach 命名为 MAPI 属性(DASL 名称 http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/8514000B)。