2016-01-22 2 views
3

В настоящее время я разрабатываю решение, которое получает электронные письма через API-интерфейс Microsoft Graph. В ноябре 2015 года Microsoft заявила, что готова к производству, и я прочитал на другом форуме, что, если вы начнете разработку с использованием API Microsoft, вы должны использовать Graph API, так как это будущее.Как получить содержимое элемента ItemAttachment через API-интерфейс Microsoft

Все идет хорошо, за исключением одной вещи, и это следующее.

Я должен получать электронные письма. Внутри этих электронных писем есть, конечно, вложения. Эти вложения приходят в некоторых вариантах. fileAttachment (изображения, документы и т. д.), referenceAttachments и itemAttachments (outlook-item). Проблема здесь связана с itemAttachments. Элемент ItemAttachment может быть чем угодно от назначения к другому сообщению. Проблема здесь в том, что я не могу получить и получить contentBytes каким-то образом, который работает для fileAttachments. Связанный объект с элементом ItemAttachment - outlookItem. Существует также страница с описанием, сделанным для этого объекта outlookItem, но примеры и детали отсутствуют. Права пользователя установлены на Mail.Read и Mail.ReadWrite.

Ссылки: Общий обзор: http://graph.microsoft.io/docs/overview/overview Получить outlookItem (пусто):

Пример вызова и ответ я получаю. Обратите внимание на типы вложений. https://graph.microsoft.com/v1.0/пользователей// сообщения// вложения

{ 
    "@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": "[email protected]", 
     "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": "[email protected]", 
     "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 
    } 
    ] 
} 

Я попытался изменить GET-заявление, вставив крепежную идентификатор с или без пути сообщений и функции расширения (которая поддерживается только глубоко один уровень), но я не могу найти решение. Что-то, что я нашел, это вопрос, который является одним и тем же, однако для унифицированного API Office365. How to retrieve ItemAttachment contents from Office 365 REST API?.

Итак, вопрос: как я могу получить содержимое внешнего вида через API-интерфейс Microsoft Graph? И как я знаю, чего ожидать? Может кто-нибудь помочь мне преодолеть это препятствие.

+0

ли никто не имеет никакого понятия, намек или решение для меня? –

+0

нет, к сожалению, нет решения –

+0

Хммм, я до сих пор не могу поверить, что Microsoft заявила, что готово к производству (!) :-( –

ответ

1

Используйте $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, 
    "[email protected]":"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":"<[email protected]od.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":"[email protected]" 
     } 
    }, 
    "from":{ 
     "emailAddress":{ 
     "name":"Adele Vance", 
     "address":"[email protected]" 
     } 
    }, 
    "toRecipients":[ 
     { 
     "emailAddress":{ 
      "name":"Alex Wilbur", 
      "address":"[email protected]" 
     } 
     } 
    ], 
    "ccRecipients":[ 
     { 
     "emailAddress":{ 
      "name":"Adele Vance", 
      "address":"[email protected]" 
     } 
     } 
    ] 
    } 
} 

Источник: https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/attachment_get#request-2

+0

Hi Dave, Спасибо за ваш ответ! Это выглядит именно то, что я искал. Теперь я могу сделать клиента очень счастливым клиентом, так как теперь можно создать полную функциональность импорта электронной почты. Снова спасибо, и я обязательно попробую это! KR, Bart –

+0

Да, это большая часть пути. Для меня выдающаяся проблема - просто получить байты элемента itemAttachment. У меня есть сомнения, что граф поддерживает вложенные вложения в этом элементе ItemAttachment. –

+0

Я протестировал и попробовал, и я очень рад, что он работает сейчас. Еще раз спасибо! –

0

Официальная документация: https://graph.microsoft.io/en-us/docs/api-reference/beta/api/attachment_get.htm. Используйте действительный код доступа к аутентификации на предъявителя и проверьте соответствующие разрешения API Графа на портале управления Azure. Вложение основано на кодированной строке 64, входящей в поле contentBytes. Правильный Uri для загрузки списка вложений сообщения: https://graph.microsoft.com/beta/me/messages/[ message 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); 
         } 
        } 
       } 
      } 
+0

Hi Semen, Благодарим за вопрос. Однако ваш ответ касается вложений в целом, и это не проблема. Вопрос заключается в получении содержимого * элемента itemAttachment. Чтобы имитировать это, вы можете использовать клиент Outlook и перенаправлять сообщение электронной почты в виде вложения в другое сообщение электронной почты. Вы заметите, что клиент Outlook идентифицирует его как элемент Outlook. Именно такого рода привязанность я не могу получить от contentBytes. Вам удалось? Является ли версия API 1.0 немного более функциональной прямо сейчас? PS: Не используйте бета-версию в производственных решениях –