首页 文章

如果附件本身是邮件,如何以编程方式访问附件中的附件数据

提问于
浏览
1

我正在以编程方式尝试以下列方式在C#中获取附件数据: -

Microsoft.Office.Interop.Outlook.Attachment attachment = objMail.Attachments[attachmentIndex];

if (attachment.DisplayName.Equals("Test"))

{ 

   const string PR_ATTACH_DATA = "http://schemas.microsoft.com/mapi/proptag/0x37010102";

    byte[] attachmentData = attachment.PropertyAccessor.GetProperty(PR_ATTACH_DATA);

}

现在,如果附件是文本文件或图像文件,我的代码工作正常 . 但是,如果附件本身就是一个邮件,它会抛出属性未知或无法找到的异常 .

请建议在哪种情况/附件类型中,此属性“http://schemas.microsoft.com/mapi/proptag/0x37010102”将不起作用,在这些情况下,在字节数组中获取附件数据的替代属性/方法是什么?

谢谢

1 回答

  • 1

    PR_ATTACH_DATA_BIN 仅适用于常规按值附件(PR_ATTACH_METHOD == ATTACH_BY_VALUE) . 嵌入式消息或OLE附件不公开该属性 - 它们使用必须使用 IAttach::OpenProperty(IID_IStorage, ...) 打开的 PR_ATTACH_DATA_OBJ - 使用OutlookSpy查看现有消息(选择消息,单击IMessage按钮,转到GetAttachmentTable选项卡,双击附件) .

    另请注意, PropertyAccessor.GetProperty 只能检索小附件的属性 . 对于大型附件, PR_ATTACH_DATA_BIN 必须使用 IAttach::OpenProperty(IID_IStorage, ...) 作为IStream打开 - PropertyAccessor.GetProperty 不会这样做 . 您将需要使用扩展MAPI(C或Delphi)或Redemption(它公开RDOAttachment . AsArray / AsText / AsStream 属性 .

相关问题