2017-10-09 2 views
0

J'utilise https://graph.microsoft.com/v1.0/me/messages?$filter=isRead eq false dans Microsoft Graph Explorer pour retourner une liste de mes emails non lus. Mon objectif est d'avoir un simple HUD sur mon site Web qui affiche une notification à tous les utilisateurs connectés combien de messages non lus ils attendent dans Outlook.Can Microsoft Graph filtre-t-il le courrier indésirable?

Le problème est que cela renvoie tous les e-mails non lus dans mon dossier Courrier indésirable en plus de mes e-mails légitimes non lus. Je voudrais filtrer le courrier indésirable, mais le graphique ne me permet pas de le faire systématiquement pour tous les utilisateurs.

Tous les e-mails ont un parentFolderID et Graph indique que l'e-mail de mon dossier Courrier indésirable est "parentFolderId": "AQMkAGFjOGFkNWM2LTcxMjQtND...". Cela signifie que je pourrais filtrer mon propre courrier indésirable, mais cela n'aide pas le reste de mes utilisateurs, car ils auraient chacun un parentFolderID unique pour leur courrier indésirable.

Je pourrais créer une règle pour moi-même qui marque Junk Email comme lu, mais je ne peux pas attendre mes utilisateurs à faire quelque chose comme ça.

Des idées sur la façon dont je peux filtrer les courriels indésirables pour tous les utilisateurs?

Répondre

1

Je ne pense pas qu'une seule requête à l'API graphique résoudra ce problème, mais vous pouvez faire plusieurs appels avec un peu de logique pour résoudre ce problème.

  1. Liste tous les répertoires de courrier

    https://graph.microsoft.com/v1.0/me/mailFolders

  2. Trouver le dossier 'courrier indésirable'

var json = ` 
 
{ 
 
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('48d31887-5fad-4d73-a9f5-3c356e68a038')/mailFolders", 
 
    "value": [ 
 
     { 
 
      "id": "AAMkAGVmMDEzMTM4LTZmYWUtNDdkNC1hMDZiLTU1OGY5OTZhYmY4OAAuAAAAAAAiQ8W967B7TKBjgx9rVEURAQAiIsqMbYjsT5e-T7KzowPTAAAAAAEkAAA=", 
 
      "displayName": "Junk Email", 
 
      "parentFolderId": "AAMkAGVmMDEzMTM4LTZmYWUtNDdkNC1hMDZiLTU1OGY5OTZhYmY4OAAuAAAAAAAiQ8W967B7TKBjgx9rVEURAQAiIsqMbYjsT5e-T7KzowPTAAAAAAEIAAA=", 
 
      "childFolderCount": 0, 
 
      "unreadItemCount": 0, 
 
      "totalItemCount": 0 
 
     } 
 
    ] 
 
}` 
 

 
var obj = JSON.parse(json) 
 

 
for(var folder in obj.value) 
 
{ 
 
    if (obj.value[folder].displayName == 'Junk Email') 
 
    { 
 
    document.write(obj.value[folder].id) 
 
    break 
 
    } 
 
}

  1. Filtrez les messages de ce dossier comme vous l'avez décrit, uniquement par utilisateur.
+0

Cela m'a mis sur le bon chemin. Le "unreadItemCount" pour le dossier Boîte de réception est ce que j'avais réellement besoin d'obtenir. –

1

Pour obtenir un nombre de messages non lus de seulement ma boîte de réception, je me suis retrouvé à l'aide:

https://graph.microsoft.com/v1.0/me/mailFolders?$filter=displayName eq 'Inbox'

qui retourne:

{ "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('ed313cf6-f369-45c6-94b2-48bbb3589788')/mailFolders", "value": [ { "id": "AAMkAGFjOGFkNWM2LTcxMjQtNDQ4My1iNjBlLTVhZmNiNTA3ZTcwNQAuAAAAAAAcAJPfHQ_aQputXsbIt-bZAQC5oqQhrW6CRI4cZpo9l5YaAA7BDDZpAAA=", "displayName": "Inbox", "parentFolderId": "AAMkAGFjOGFkNWM2LTcxMjQtNDQ4My1iNjBlLTVhZmNiNTA3ZTcwNQAuAAAAAAAcAJPfHQ_aQputXsbIt-bZAQC5oqQhrW6CRI4cZpo9l5YaAA7BDDZmAAA=", "childFolderCount": 14, "unreadItemCount": 1, "totalItemCount": 25 } ] }

Les données Je suis après est dans "unreadItemCount". Merci à Shawn Tabrizi de m'avoir mis sur le bon chemin avec /me/mailFolders.

S'il vous plaît noter que vous pouvez actuellement pas filtrer /me/messages par parentFolderId, donc vous devez exécuter du code filtrage personnalisé comme Shawn Tabrizi avait suggéré si vous voulez obtenir un contenu de courrier de /me/messages.

{ "error": { "code": "ErrorInvalidProperty", "message": "The property 'ParentFolderId' does not support filtering.", "innerError": { "request-id": "526bafdd-d8ac-47f2-be1f-656b3b93da35", "date": "2017-10-11T15:45:33" } } }

0

Vous pouvez exécuter deux requêtes distinctes pour obtenir tous les nouveaux e-mails dans le dossier de boîte de réception et les données de contenu.

  1. Première course:

https://graph.microsoft.com/v1.0/me/mailFolders?$filter=displayName eq 'Inbox'

pour obtenir des détails sur le dossier Boîte de réception uniquement.

$filter=displayName eq 'Inbox' filtres dossiers avec displayName égal à (eq) 'Inbox'

Ce retour:

`{ 
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('9285d2c9-f210-45e1-b78e-d74ba3d5e186')/mailFolders", 
    "value": [ 
     { 
      "id": "AAMkADRlM2I0YmM5LWI2MTUtNDgzZC04N2M0LWJmMWU1MTFjMDBiYwAuAAAAAAB1tij3RiDhRab9QpP_GQhpAQCTj9cyjezTSYJYfMfg3p5fAAAAAAEMAAA=", 
      "displayName": "Inbox", 
      "parentFolderId": "AAMkADRlM2I0YmM5LWI2MTUtNDgzZC04N2M0LWJmMWU1MTFjMDBiYwAuAAAAAAB1tij3RiDhRab9QpP_GQhpAQCTj9cyjezTSYJYfMfg3p5fAAAAAAEIAAA=", 
      "childFolderCount": 0, 
      "unreadItemCount": 1, 
      "totalItemCount": 0 
     } 
    ] 
}` 
  1. Pour obtenir les données de contenu dont vous avez besoin de la valeur id pour faire partie de la deuxième requête.

Ajouter &$count=true à la fin pour obtenir le nombre d'e-mails non lus dans la boîte de réception:

seconde requête:

https://graph.microsoft.com/v1.0/me/mailFolders/{ Inbox id goes here }/messages?$filter=isRead eq false&$count=true

Ce filtre le non lu (isRead eq false) à partir du dossier Boîte de réception et retourne quelque chose comme:

`{ 
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('9285d2c9-f210-45e1-b78e-d74ba3d5e186')/mailFolders('AAMkADRlM2I0YmM5LWI2MTUtNDgzZC04N2M0LWJmMWU1MTFjMDBiYwAuAAAAAAB1tij3RiDhRab9QpP_GQhpAQCTj9cyjezTSYJYfMfg3p5fAAAAAAEMAAA%3D')/messages", 
"@odata.count": 1, 
    "value": [ 
     { 
      "@odata.etag": "W/\"CQAAABYAAACTj9cyjezTSYJYfMfg3p5fAACWjeF5\"", 
      "receivedDateTime": "2018-01-29T11:32:40Z", 
      "sentDateTime": "2018-01-29T11:32:37Z", 
      "subject": "New Mail", 
      "bodyPreview": "New email body for email preview", 
      "isRead": false, 
      "isDraft": false, 
      -- More properties are returned. Shortened response for brevity -- 

`

Les données de contenu de courrier électronique sont acquises via value.

Le nombre d'e-mails non lus dans le dossier Boîte de réception est accessible via odata.count.

Voir Microsof Graph - List messages in a specified folder in the mailbox