通过Outlook REST API获取附加邮件的附件

时间:2016-06-08 23:17:07

标签: office365 outlook-restapi

如果我的邮箱中有一条带有.eml(即邮件/ rfc822)附件的邮件,fetching the message via the REST API会返回一条带有ItemAttachment邮件的邮件。 ItemAttachment封装表示附加消息的Microsoft.OutlookServices.Message。附加的Message对象具有空Id,因此我们无法直接获取它。但是,如果我们想要获取其中一个附件的内容呢?

Message in Inbox
  \--> Attachments
     \--> ItemAttachment
        \--> Item
           \--> Attachments
              \--> FileAttachment    <-- (want the content of this)

第二级FileAttachment的@odata.id为:

https://outlook.office.com/api/beta/Users('1985bb55-77bd-4936-868d-a1606dc735ff@3bb3f5a2-37a8-4451-b57b-ef37f0b2a1fa')/('')/Attachments('AAMkAGQ3MzU1BBc2LWFjNTItNDk4Mi1iZTdlLTM3NGM0NzY5NTNmYgBGAAAAAACI4ZQOxnCPTpOe8P6IYO9gBwA_fgVM0BybQ5W_noJvz6hgAAAAAAEMAAA_fgVM0BybQ5W_noJvz6hgAAB2hYE9AAACEgAQAA_BBM8zEqJPrcr4BJ-cOyUSABAAlLV-2suqwEGuRduQ43E9pg==')

但是由于缺少message_id路径段,任何获取该对象的尝试都将失败:

{"error":{"code":"RequestBroker-ParseUri","message":"Empty segment encountered in request URL. Please make sure that a valid request URL is specified."}}

如何获取该附件的内容?

1 个答案:

答案 0 :(得分:0)

目前,Outlook REST API不支持从邮件的(文件/项目)附件获取附件。但是,根据您在帖子中提供的link,MSFT似乎已经考虑添加此功能。

在您的方案中,您希望从邮件中获取附件(.eml格式),这是邮件b的附件。 “.eml”附件实际上是文件附件而不是项目附件。这意味着当我们尝试使用以下REST扩展它时,它会失败:

GET: https://outlook.office.com/api/v2.0/me/MailFolders/Inbox/messages/{messageID}/attachments/{attachmentId}?$expand=Microsoft.OutlookServices.ItemAttachment/Item

它只返回与我们直接获得附件相同的结果,如下所示: enter image description here

作为一种变通方法,我们可能会将附件的内容字节保存到临时文件中,并使用其他库从“.eml”文件中检索附件。

关于'RequestBroker-ParseUri'的错误,您是否在@ odata.id中有消息段?正确的@ odata.id应该是:

@ odata.id = https://outlook.office.com/api/v1.0/Users('username @ tenant.onmicrosoft.com')/ 消息(AAAAFFtq ... JFAAA =') /附件(AAAA ... InxVMOHvBDM0 =')

<强>更新

Message->
         Item attachment(eml)->
                               File attachment

要获取商品附件的文件附件内容,我们可以使用以下REST API扩展商品附件:

GET: https://outlook.office.com/api/beta/me/mailfolders/inbox/messages/{messageId}/attachments?$expand=Microsoft.OutlookServices.ItemAttachment/Item

响应: enter image description here

然后我们可以通过'ContentBytes'直接获取文件附件的内容。