Office365 如何通过Microsoft Graph API检索itemAttachment的内容
我目前正在开发一个解决方案,通过Microsoft Graph API检索电子邮件。2015年11月,微软宣布它已经准备好生产,我在另一篇论坛帖子中读到,如果你现在开始使用微软API进行开发,你应该使用Graph API,因为它是未来的发展方向 一切都很顺利,除了一件事,那就是以下几点 我必须找回电子邮件。这些电子邮件中当然有附件。这些附件有一些变化。文件附件(图像、文档等)、参考附件和项目附件(outlook项目)。这里的问题是项目附件。itemAttachment可以是从约会到其他邮件的任何内容。这里的问题是,我无法以某种方式获取和检索contentBytes,这对fileAttachments是有效的。与itemAttachment相关的对象是outlookItem。还有一个页面对此了望项目进行了描述,但缺少示例和详细信息。 用户权限设置为Mail.Read和Mail.ReadWrite 链接: 概述: 获取outlookItem(空?): 我收到的示例呼叫和响应。请注意附件的类型。 /用户//消息//附件Office365 如何通过Microsoft Graph API检索itemAttachment的内容,office365,office365api,azure-ad-graph-api,Office365,Office365api,Azure Ad Graph Api,我目前正在开发一个解决方案,通过Microsoft Graph API检索电子邮件。2015年11月,微软宣布它已经准备好生产,我在另一篇论坛帖子中读到,如果你现在开始使用微软API进行开发,你应该使用Graph API,因为它是未来的发展方向 一切都很顺利,除了一件事,那就是以下几点 我必须找回电子邮件。这些电子邮件中当然有附件。这些附件有一些变化。文件附件(图像、文档等)、参考附件和项目附件(outlook项目)。这里的问题是项目附件。itemAttachment可以是从约会到其他邮件的任何
{
"@odata.context": "link",
"value": [
{
"@odata.type": "#microsoft.graph.fileAttachment",
"id": "AAMkAGU2NmIwMTcxLTljYzUtNGRiMi1hZjczLTllNzhiZDRiNWZlZABGAAAAPAD_Lx_gimDGRqSr98J_O_e6BwDcWyYHlO7rS5_XpLHCx6NSAAIMC0V-AADcWyYHlO7rS5_XpLHCx6NSAAIMC6RgAAABEgAQAGhN_vm1RlBPt7V4N9a89UY=",
"lastModifiedDateTime": "2016-01-13T14:25:33Z",
"name": "image001.png",
"contentType": "image/png",
"size": 5077,
"isInline": true,
"contentId": "image001.png@01D14E16.A3A32480",
"contentLocation": null,
"contentBytes": "iVBORw0KGgoAAAANSUhEUgAAAKAAAACCCAIAAABOyVRHAAAAAXNSR0IArs4c6QAAEndJREFUeF7tXQ1QFFe2bkbU... (truncated)"
},
{
"@odata.type": "#microsoft.graph.fileAttachment",
"id": "AAMkAGU2NmIwMTcxLTljYzUtNGRiMi1hZjczLTllNzhiZDRiNWZlZABGAAAAPAD_Lx_gimDGRqSr98J_O_e6BwDcWyYHlO7rS5_XpLHCx6NSAAIMC0V-AADcWyYHlO7rS5_XpLHCx6NSAAIMC6RgAAABEgAQAFnSLgIC5wZOosmLtBWK8gE=",
"lastModifiedDateTime": "2016-01-13T14:25:34Z",
"name": "image002.png",
"contentType": "image/png",
"size": 3722,
"isInline": true,
"contentId": "image002.png@01D14E16.A3A32480",
"contentLocation": null,
"contentBytes": "iVBORw0KGgoAAAANSUhEUgAAAPoAAABSCAYAAAB9o8m+AAAAGXRFWHRTb... (truncated)"
},
{
"@odata.type": "#microsoft.graph.fileAttachment",
"id": "AAMkAGU2NmIwMTcxLTljYzUtNGRiMi1hZjczLTllNzhiZDRiNWZlZABGAAAAPAD_Lx_gimDGRqSr98J_O_e6BwDcWyYHlO7rS5_XpLHCx6NSAAIMC0V-AADcWyYHlO7rS5_XpLHCx6NSAAIMC6RgAAABEgAQANOuw7m8sW1Ot3MivYQ5OYU=",
"lastModifiedDateTime": "2016-01-13T14:25:24Z",
"name": "Knipsel.PNG",
"contentType": null,
"size": 7641,
"isInline": false,
"contentId": null,
"contentLocation": null,
"contentBytes": "iVBORw0KGgoAAAANSUhEUgAAAKAAAACCCAYAAADBq8MQAAA... (truncated)"
},
{
"@odata.type": "#microsoft.graph.itemAttachment",
"id": "AAMkAGU2NmIwMTcxLTljYzUtNGRiMi1hZjczLTllNzhiZDRiNWZlZABGAAAAPAD_Lx_gimDGRqSr98J_O_e6BwDcWyYHlO7rS5_XpLHCx6NSAAIMC0V-AADcWyYHlO7rS5_XpLHCx6NSAAIMC6RgAAABEgAQAPEUC740tjtAlNTe8NpopUI=",
"lastModifiedDateTime": "2016-01-14T15:55:07Z",
"name": "RE: Test met plaatje",
"contentType": null,
"size": 36972,
"isInline": false
}
]
}
我试图通过粘贴附件id来更改GET语句,无论是否粘贴消息路径和扩展功能(仅支持一级深度),但我似乎找不到解决方案。
我发现了一个问题,这与office365统一API是一样的
因此,问题是:如何通过MicrosoftGraphAPI检索Outlook项目的内容?我怎么知道会发生什么?谁能帮我克服这个障碍。官方文件:。使用有效的承载身份验证访问代码,并在Azure管理门户上检查适当的Graph API权限。附件是基于64编码的字符串,位于
contentBytes
字段中。加载邮件附件列表的正确Uri为:邮件Id]/attachments。调用附件终结点的示例代码如下:
using (var client = new HttpClient())
{
using (var request = new HttpRequestMessage(HttpMethod.Get,
"https://graph.microsoft.com/beta/me/messages/..id../attachments"))
{
request.Headers.Authorization =
new AuthenticationHeaderValue("Bearer", "...valid access token...");
using (HttpResponseMessage response = await client.SendAsync(request))
{
if (response.StatusCode == HttpStatusCode.OK)
{
result = await response.Content.ReadAsStringAsync();
var json = JObject.Parse(result);
}
}
}
}
使用
$expand
选项:
GET https://graph.microsoft.com/v1.0/me/messages('AAMkADA1M-zAAA=')/attachments('AAMkADA1M-CJKtzmnlcqVgqI=')/?$expand=microsoft.graph.itemattachment/item
答复:
HTTP/1.1 200 OK
Content-type: application/json
{
"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#users('d1a2fae9-db66-4cc9-8133-2184c77af1b8')/messages('AAMkADA1M-zAAA%3D')/attachments/$entity",
"@odata.type":"#microsoft.graph.itemAttachment",
"id":"AAMkADA1MCJKtzmnlcqVgqI=",
"lastModifiedDateTime":"2017-07-21T00:20:34Z",
"name":"Reminder - please bring laptop",
"contentType":null,
"size":32005,
"isInline":false,
"item@odata.context":"https://graph.microsoft.com/v1.0/$metadata#users('d1a2fae9-db66-4cc9-8133-2184c77af1b8')/messages('AAMkADA1M-zAAA%3D')/attachments('AAMkADA1M-CJKtzmnlcqVgqI%3D')/microsoft.graph.itemAttachment/item/$entity",
"item":{
"@odata.type":"#microsoft.graph.message",
"id":"",
"createdDateTime":"2017-07-21T00:20:41Z",
"lastModifiedDateTime":"2017-07-21T00:20:34Z",
"receivedDateTime":"2017-07-21T00:19:55Z",
"sentDateTime":"2017-07-21T00:19:52Z",
"hasAttachments":false,
"internetMessageId":"<BY2PR15MB05189A084C01F466709E414F9CA40@BY2PR15MB0518.namprd15.prod.outlook.com>",
"subject":"Reminder - please bring laptop",
"importance":"normal",
"conversationId":"AAQkADA1MzMyOGI4LTlkZDctNDkzYy05M2RiLTdiN2E1NDE3MTRkOQAQAMG_NSCMBqdKrLa2EmR-lO0=",
"isDeliveryReceiptRequested":false,
"isReadReceiptRequested":false,
"isRead":false,
"isDraft":false,
"webLink":"https://outlook.office365.com/owa/?ItemID=AAMkADA1M3MTRkOQAAAA%3D%3D&exvsurl=1&viewmodel=ReadMessageItem",
"body":{
"contentType":"html",
"content":"<html><head>\r\n</head>\r\n<body>\r\n</body>\r\n</html>"
},
"sender":{
"emailAddress":{
"name":"Adele Vance",
"address":"AdeleV@contoso.onmicrosoft.com"
}
},
"from":{
"emailAddress":{
"name":"Adele Vance",
"address":"AdeleV@contoso.onmicrosoft.com"
}
},
"toRecipients":[
{
"emailAddress":{
"name":"Alex Wilbur",
"address":"AlexW@contoso.onmicrosoft.com"
}
}
],
"ccRecipients":[
{
"emailAddress":{
"name":"Adele Vance",
"address":"AdeleV@contoso.onmicrosoft.com"
}
}
]
}
}
HTTP/1.1200正常
内容类型:application/json
{
“@odata.context”:”https://graph.microsoft.com/v1.0/$metadata#用户('d1a2fae9-db66-4cc9-8133-2184c77af1b8')/messages('AAMkADA1M-zAAA%3D')/attachments/$entity“,
“@odata.type”:“#microsoft.graph.itemAttachment”,
“id”:“AAMkADA1MCJKtzmnlcqVgqI=”,
“lastModifiedDateTime”:“2017-07-21T00:20:34Z”,
“姓名”:“提醒-请携带笔记本电脑”,
“contentType”:空,
“尺寸”:32005,
“isInline”:错误,
"item@odata.context":"https://graph.microsoft.com/v1.0/$metadata#users('d1a2fae9-db66-4cc9-8133-2184c77af1b8')/消息('AAMkADA1M-zAAA%3D')/附件('AAMkADA1M-CJKtzmnlcqVgqI%3D')/microsoft.graph.itemAttachment/item/$entity“,
“项目”:{
“@odata.type”:“#microsoft.graph.message”,
“id”:“,
“createdDateTime”:“2017-07-21T00:20:41Z”,
“lastModifiedDateTime”:“2017-07-21T00:20:34Z”,
“接收日期时间”:“2017-07-21T00:19:55Z”,
“sentDateTime”:“2017-07-21T00:19:52Z”,
“hasAttachments”:假,
“internetMessageId”:“”,
“主题”:“提醒-请携带笔记本电脑”,
“重要性”:“正常”,
“对话ID”:“AAQKADA1MZMYGI4LTLKZDCNDKZY05M2RILDIN2E1NDE3MTRKQAMGnscmbqdkrla2EMR-lO0=”,
“isDeliveryReceiptRequested”:false,
“isReadReceiptRequested”:false,
“isRead”:错误,
“isDraft”:错误,
“网络链接”:https://outlook.office365.com/owa/?ItemID=AAMkADA1M3MTRkOQAAAA%3D%3D&exvsurl=1&viewmodel=ReadMessageItem",
“正文”:{
“内容类型”:“html”,
“内容”:“\r\n\r\n\r\n\r\n”
},
“发件人”:{
“电子邮件地址”:{
“姓名”:“阿黛勒·万斯”,
“地址”:AdeleV@contoso.onmicrosoft.com"
}
},
“发件人”:{
“电子邮件地址”:{
“姓名”:“阿黛勒·万斯”,
“地址”:AdeleV@contoso.onmicrosoft.com"
}
},
“收件人”:[
{
“电子邮件地址”:{
“姓名”:“亚历克斯·威尔伯”,
“地址”:AlexW@contoso.onmicrosoft.com"
}
}
],
“收件人”:[
{
“电子邮件地址”:{
“姓名”:“阿黛勒·万斯”,
“地址”:AdeleV@contoso.onmicrosoft.com"
}
}
]
}
}
资料来源:没有人能给我任何线索、提示或解决方案吗?没有,不幸的是没有解决方案。嗯,我仍然不敢相信微软声称它已经准备好生产了(!):-(要获取附件列表,您需要知道邮件Id。当您有邮件Id时,您可以轻松调用邮件Id]/attachments with valid Bearer authentication!!!!使用有效的访问代码。此外,请确保您已为Azure管理门户上的此操作分配了足够的权限。附件的内容是base64编码的字符串,它位于contentBytes字段中。如果您有attachmentId,您可以使用usd。请检查此文档:。它是wokring fineHi Semen,感谢您调查此问题。但是,您的答案是关于一般附件,而这不是此处的问题。问题是关于获取itemAttachment的de内容。要模拟此情况,您可以n使用outlook客户端并将一封电子邮件作为附件转发到另一封电子邮件。您会注意到outlook客户端将其标识为outlook项目。正是这种附件我无法从中获取contentBytes。您设法做到了吗?API 1.0版现在是否功能更强?PS:不要使用Beta版生产解决方案Hi Dave,谢谢你的回答!这正是我想要的。现在我可以让客户成为一个非常高兴的客户,因为现在可以创建一个完整的电子邮件导入功能。再次感谢,我一定会尝试这个!!KR,BartYeah,这是大部分的方法。对我来说,一个突出的问题就是只使用get项目附件的字节。I