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

时间:2017-06-07 02:48:26

标签: c# outlook vsto outlook-addin

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

public class Agenda extends AppCompatActivity implements RecycleViewAdapter.Listener, FragmentDrawer.FragmentDrawerListener, PreferenceManager.OnActivityResultListener {
    protected void onCreate(Bundle savedInstanceState) {
            Log.d("OnCreate", "----------------------------------------");
            super.onCreate(savedInstanceState);
        }
    }

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

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

由于

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

Microsoft Graph Rest API是大多数Microsoft Data(包括事件),大多数Office产品(包括Outlook)的单个端点和包装。最重要的是,任何一种语言都可以向端点发出请求并检索信息。请参阅完整的文档HERE入门。

有关获取Outlook附件的简单“获取”请求,请参见以下代码。请注意,还有其他更复杂的实现。文档: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