2016-01-22 2 views
3

Je suis actuellement en train de développer une solution qui récupère des e-mails via l'API Microsoft Graph. En novembre 2015, Microsoft a déclaré qu'il était prêt pour la production et j'ai lu dans un autre forum que si vous commencez maintenant à développer en utilisant une API Microsoft, vous devriez utiliser l'API Graph, car c'est l'avenir.Comment récupérer le contenu d'un itemAttachment via l'API Microsoft Graph

Tout va bien, sauf pour une chose et ce qui suit.

Je dois récupérer des e-mails. À l'intérieur de ces e-mails, il y a bien sûr des pièces jointes. Ces pièces jointes viennent dans certaines variétés. fileAttachment (images, documents, etc.), referenceAttachments et itemAttachments (outlook-item). Le problème ici est avec l'itemAttachments. Un itemAttachment peut être quelque chose d'un rendez-vous à un autre message. Le problème ici est que je ne suis pas capable d'obtenir et de récupérer le contentBytes d'une manière qui fonctionne pour fileAttachments. Un objet lié à itemAttachment est outlookItem. Il y a aussi une page avec une description faite pour ce outlookItem, mais les exemples et les détails sont manquants. Les droits d'utilisateur sont définis sur Mail.Read et Mail.ReadWrite.

Liens: Aperçu général: http://graph.microsoft.io/docs/overview/overview Get outlookItem (vide?):

Exemple d'appel et la réponse que je reçois. S'il vous plaît noter les types de pièces jointes. https://graph.microsoft.com/v1.0/utilisateurs// messages// pièces jointes

{ 
    "@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 
    } 
    ] 
} 

j'ai essayé de changer l'EEG-déclaration en collant l'identifiant de fixation avec ou sans le chemin des messages et l'expansion fonction (qui est pris en charge uniquement un niveau de profondeur), mais je n'arrive pas à trouver la solution. Quelque chose que j'ai trouvé est cette question, qui est un peu la même chose, mais c'est pour l'API unifiée Office365. How to retrieve ItemAttachment contents from Office 365 REST API?. Donc, la question: Comment puis-je récupérer le contenu d'un outlookItem via l'API Microsoft Graph? Et comment puis-je savoir à quoi m'attendre? Quelqu'un peut-il m'aider à surmonter cet obstacle?

+0

Est-ce que personne n'a aucune idée, indice ou une solution pour moi? –

+0

non, malheureusement, il n'y a pas de solution –

+0

Hmmm, je ne peux toujours pas croire que Microsoft a déclaré que la production est prête (!) :-( –

Répondre

1

Utilisation $expand Option:

GET https://graph.microsoft.com/v1.0/me/messages('AAMkADA1M-zAAA=')/attachments('AAMkADA1M-CJKtzmnlcqVgqI=')/?$expand=microsoft.graph.itemattachment/item 

Réponse:

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]" 
     } 
     } 
    ] 
    } 
} 

Source: https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/attachment_get#request-2

+0

Salut Dave, Merci pour votre réponse! Cela ressemble exactement à ce que je cherchais. Maintenant, je peux faire du client un client très heureux, car une fonctionnalité complète d'importation de courrier électronique peut maintenant être créée. Encore merci et je vais certainement essayer cela !! KR, Bart –

+0

Ouais c'est la plupart du temps là-bas. Un problème important pour moi est de simplement obtenir les octets de l'itemAttachment. J'ai des doutes que ce graphique prenne en charge les pièces jointes imbriquées dans cet itemAttachment également. –

+0

J'ai testé et essayé et je suis très heureux que cela fonctionne maintenant. Merci encore! –

0

La documentation officielle: https://graph.microsoft.io/en-us/docs/api-reference/beta/api/attachment_get.htm. Utilisez un code d'accès d'authentification de support valide et vérifiez les autorisations d'API de graphes appropriées sur le portail de gestion Azure. La pièce jointe est une chaîne codée en base64, provenant du champ contentBytes. Corriger Uri pour charger la liste des pièces jointes d'un message est: https://graph.microsoft.com/beta/me/messages/[ Message Id]/pièces jointes. Exemple de code pour appeler les pièces jointes endpoint est ci-dessous:

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

Salut Semen, Merci d'avoir examiné le problème. Cependant, votre réponse concerne les pièces jointes en général et ce n'est pas le problème ici. La question concerne l'obtention de * contenu * d'un itemAttachment. Pour simuler cela, vous pouvez utiliser le client Outlook et transférer un message électronique en pièce jointe à un autre message électronique. Vous remarquerez que le client Outlook l'identifie comme un élément Outlook. Exactement ce type de pièce jointe sont ceux dont je ne peux pas obtenir le contenu. Avez-vous réussi à? L'API version 1.0 est-elle un peu plus fonctionnelle actuellement? PS: Ne pas utiliser Beta dans les solutions de production –