2016-04-06 32 views
2

目前在JavaScript中開發一個Office附加組件,我發現Outlook Windows富客戶端與Office365 Web門戶之間的API可用性存在一些差異。展望JavaScript api附件

我的加載項目前在「web」模式下很像魅力,但在Rich Client中並不如預期。

該加載項獲取電子郵件正文+附件並將其發送到遠程應用服務器。

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

    // dealing with email in HTML format 

}); 

對於附件,我做這樣的:

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 
    }); 

} 

(JS的加載只發送附件的元數據發送到遠程應用程序,遠程應用程序有連接到Exchange。 EWS實際取得與所提供的元數據附件)

問題

當有內嵌的圖像連接編輯在電子郵件,Web門戶和豐富的客戶端顯示它完全不同的輸出HTML:

門戶網站

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

富客戶端

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

另方法Office.context.mailbox.item.attachments返回這種對象:

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

由於將內聯圖像的名稱映射到Web Portal的HTML中的「cid:XYZ」非常清楚,我該如何將它們映射到富客戶機中?

稍加觀察:連attachment JS對象說,圖像是一樣的東西image003.png,則<img>標籤的圖像不REFLET它在所有並顯示類似~WRS...../image001.gif。 (文件名不identicals,擴展不匹配)

謝謝:)

回答

0

我找到一種解決方法,我在這裏發佈,以防有​​人面臨着同樣的問題。

使用JS API,可以檢索訪問令牌,該訪問令牌可以進一步用於後端,以連接到SOAP Exchange Web服務(EWS)。

訪問令牌通過Office.context.mailbox.getCallbackTokenAsync方法

一旦令牌檢索,條目標識和EwsURL收集和發送到後端,您可以使用EWS檢索郵件體無論是在純文本或完整的HTML和在HTML中正確指定的內嵌圖像。

您會收到類似<img src="cid:[email protected]" />的東西,它與之前檢索到的附件對象完全匹配。

獎勵:連接到EWS時,傳統上會連接登錄/密碼對。在這種情況下,您不知道這些憑據。 HTTP頭通常包含:

Authorization: Basic [credentials] 

對於通過訪問令牌認證到EWS,您必須將其設置爲:

Authorization: Bearer [accessToken]