2016-06-08 100 views
2

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

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

这第二级FileAttachment的具有的@odata.id

https://outlook.office.com/api/beta/Users('[email protected]7f0b2a1fa')/('')/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."}}

如何获取该附件的内容?

回答

0

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

而在你的场景中,你想从消息a(.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( '用户名@ 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”获得文件附件的内容。

+0

我会很高兴得到一个FileAttachment并自己解析它。这些情况非常罕见,这不是问题。但我没有收到FileAttachment。我正在使用测试版API,并且正在获取'“@ odata.type”:“#Microsoft。OutlookServices.ItemAttachment“,”@ odata.id“:”https://outlook.office.com/api/beta/Users('[email protected]7f0b2a1fa' )/ Messages('AAMkAGQ3MzU1YTc2L ...')/ Attachments('AAMkAGQ3MzU ...')“' – dkarp

+0

感谢您的更正。使用Beta版API后,我可以将'eml'附件作为项目附件可能会重现此问题,正如您在下面描述的文件附件ID返回错误 在这种情况下,我们可以扩展原始邮件的附件以获取项目附件的文件附件的内容。 –

相关问题