【问题标题】:How to access attachment data programmatically in outlook if attachment is itself a mail如果附件本身是邮件,如何在 Outlook 中以编程方式访问附件数据
【发布时间】:2017-11-08 05:15:47
【问题描述】:

我正在以编程方式尝试通过以下方式在 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”将不起作用,在这些情况下,在字节数组中获取附件数据的替代属性/方法是什么?

谢谢

【问题讨论】:

    标签: c# outlook vsto outlook-addin


    【解决方案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 属性。

    【讨论】:

    • 嗨,德米特里,感谢您的回复。您能否提供一些示例,如何从 C# 代码调用 IAttach::OpenProperty ?这对我有很大帮助。
    • 你不能 - 正如我所提到的,扩展 MAPI 仅适用于 C++ 或 Delphi。
    【解决方案2】:

    Microsoft Graph Rest API 是大多数 Microsoft 数据(包括事件)、大多数办公产品(包括 Outlook)的单一端点和包装器。最重要的是,任何语言都可以向端点发出请求并检索信息。请参阅完整的文档HERE 以开始使用。

    有关 Outlook 附件的简单 Get 请求,请参见下面的代码。请注意,还有其他更复杂的实现。文档:https://docs.microsoft.com/en-us/graph/api/attachment-get?view=graph-rest-1.0&tabs=http 滚动链接,您可以找到 C#、Java 和 JavaScript 示例,了解如何实现此功能。

    GET /me/messages/{id}/attachments/{id}
    GET /users/{id | userPrincipalName}/messages/{id}/attachments/{id}
    
    GET /me/messages/{id}/attachments/{id}/$value
    GET /users/{id | userPrincipalName}/messages/{id}/attachments/{id}/$value
    

    【讨论】:

      猜你喜欢
      • 2017-04-09
      • 1970-01-01
      • 2023-03-07
      • 2010-10-22
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多