目前我正在尝试在我自己的网络客户端中显示来自Outlook的邮件。所以我通过调用:
通过图表api接收所有邮件https://graph.microsoft.com/v1.0/me/messages/
选择邮件后,我会通过以下方式获取内容:
https://graph.microsoft.com/v1.0/me/messages/{message.id}
这为我提供了邮件本身,并使用message / body /内容,我可以为用户显示邮件。
消息本身可以包含内嵌图像(在img标记中使用cid:
)。在这种情况下,图像可作为邮件的附件。所有附件都可以通过以下方式访问:
https://graph.microsoft.com/v1.0/me/messages/{message.id}/attachments
不幸的是,我只想获得可视化邮件所需的这些附件的内容(一些徽标等),而不是附加的PowerPoint-Presentation。如果我们首先看一下上面调用的内容,看起来很容易实现所需的行为:
{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#users('{user-id}')/messages('message-id')/attachments",
"value": [
{
"@odata.type": "#microsoft.graph.fileAttachment",
"id": "{attachment-id}",
"lastModifiedDateTime": "2018-03-12T14:08:56Z",
"name": "justSomeFileName.jpg",
"contentType": "image/jpeg",
"size": 3049,
"isInline": true,
"contentId": "ii_jek0lxzn0_1620b160dff814aa",
"contentLocation": null,
"contentBytes": "{base64 string length:3736}"
},
{
"@odata.type": "#microsoft.graph.fileAttachment",
"id": "{attachment-id}",
"lastModifiedDateTime": "2018-03-12T14:07:38Z",
"name": "my presentation.pptx",
"contentType": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
"size": 184754,
"isInline": false,
"contentId": "CA6D0D1EAE042D4A81A110524C30BF01@eurprd03.prod.outlook.com",
"contentLocation": null,
"contentBytes": "{base64 string length:245704}"
}
]
}
为了获得真正需要的附件以使用图片可视化邮件,我尝试了几个查询,但都没有成功:
全力以赴IsInline equals true
:
https://graph.microsoft.com/v1.0/me/messages/{message.id}/attachments/?$filter=isInline eq true
最明显的一个。不幸的是,它会返回所有附件,而不会应用任何过滤。
全部获取,但使用select仅获取id和contentId:
https://graph.microsoft.com/v1.0/me/messages/{message.id}/attachments/?$select=id,contentId
不是那么有效,因为我们必须进行两次调用(另一次通过调用/messages/{message.id}/attachments/{attachment-id}
来获取内容),但更好的是没有。不幸的是,这会返回以下错误消息:
“无法在类型'microsoft.graph.attachment'上找到名为'contentId'的属性。”
获取除contentBytes
以外的所有属性的所有附件:
为此,我在documentation内找不到任何内容。所以像$except=contentBytes
这样的东西只能得到所有附件的元信息而没有具体的数据本身。
那么,是否存在任何方法来过滤类型#microsoft.graph.fileAttachment
的属性上的附件或获取所有附件的元信息而没有属性contentBytes
?