2016-04-06 1 views
2

En cours de développement d'un complément Office en JavaScript, je remarque certaines différences dans la convivialité de l'API entre le client enrichi Outlook Windows et le portail Web Office365. Mon complément fonctionne actuellement comme un charme dans le mode "Web" mais pas comme prévu dans le client enrichi.Outlook Pièces jointes d'API JavaScript

Le complément extrait le corps du message électronique + les pièces jointes et l'envoie à un serveur d'applications distant.

Office.context.mailbox.item.body.getAsync(Office.CoercionType.Html, { asyncContext: "html" }, function callback(resHtml) { 

    // dealing with email in HTML format 

}); 

Pour les pièces jointes, je fais comme ceci:

for (var i = 0; i < Office.context.mailbox.item.attachments.length; i++) { 
    var _att = Office.context.mailbox.item.attachments[i]; 

    attachments.assets.push({ 
     name: _att.name, 
     id: _att.id, 
     contentType: _att.contentType, 
     size: _att.size, 
     attachmentType: _att.attachmentType, 
     isInline: _att.isInline 
    }); 

} 

(La JS n'add-in envoie des données méta-attachement à l'application à distance L'application à distance doit se connecter à Exchange. EWS pour aller chercher réellement les pièces jointes avec la condition méta-données)

la question

Quand il y a des images inlined attach ed dans le courrier électronique, le portail Web et le client Rich montre complètement différemment dans le code HTML de sortie:

portail Web

<img originalSrc="cid:[email protected]" src="data:image/gif;base64,..." width="310" height="15" id="x__x0000_i1030" alt="..."> 

Rich Client

<img src="~WRS%7b0E0FFAA4-6FC0-49C1-9BB6-3D1A2F5211F1%7d_fichiers/image001.jpg" width=906 height=245 id="Picture 6"> 

autre la main, la méthode Office.context.mailbox.item.attachments renvoie ce genre d'objets:

{ 
    "_data$p$0": { 
     "id": "AAMkAGI2MjY4MGQ....", 
     "name": "image004.png", 
     "contentType": "image/png", 
     "size": 427, 
     "attachmentType": 0, 
     "isInline": true 
    } 
} 

Comme il est assez clair de mapper les images en ligne par leur nom à leur "cid: XYZ" dans le code HTML du portail Web, comment dois-je les mapper dans le client enrichi?

Petite observation: même l'objet attachment JS dit l'image est quelque chose comme image003.png, la balise <img> pour l'image ne REFLET pas du tout et montre quelque chose comme ~WRS...../image001.gif. (Nom de fichier ne identicals, extensions non-concordance)

Merci :)

Répondre

0

J'ai trouvé une solution, je posterai ici au cas où quelqu'un fait face à la même question. Avec l'API JS, on peut récupérer le jeton d'accès qui peut être utilisé en aval pour se connecter aux services Web Exchange (SOWS) SOAP.

Le jeton d'accès est récupérable via la méthode Office.context.mailbox.getCallbackTokenAsync

Une fois le jeton, le itemId et EwsURL sont rassemblés et envoyés à l'arrière-plan, vous pouvez utiliser SAP pour récupérer le corps du message soit en clair ou HTML complet avec des images en ligne correctement spécifié dans le HTML.

Vous recevrez quelque chose comme <img src="cid:[email protected]" /> qui est parfaitement compatible avec l'objet de fixation précédemment récupéré.Bonus: lorsque vous vous connectez à EWS, vous vous connectez traditionnellement avec un couple login/mot de passe. Dans ce cas, vous ne connaissez pas ces informations d'identification. les en-têtes HTTP contient habituellement:

Authorization: Basic [credentials] 

Pour l'authentification au serveur Web intégré via un jeton d'accès, vous devez définir comme suit:

Authorization: Bearer [accessToken]