如果我的邮箱中有一条带有.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."}}
如何获取该附件的内容?
答案 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
作为一种变通方法,我们可能会将附件的内容字节保存到临时文件中,并使用其他库从“.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
然后我们可以通过'ContentBytes'直接获取文件附件的内容。