0

我試圖找到解決我的問題,但沒有找到任何地方,希望有人在這裏可以救我。展望插件圖像和文件

我在VS2015的JavaScript中編寫加載項,加密和解密正文消息。

1.第一個問題是接收者看不到圖像。

撰寫模式我們encrypte的消息,然後當我們decrypte它的做工不錯(有關複製到人體通過「插入圖片內聯」按鈕圖像通話),因爲撰寫模式是客戶端和他他承認當地的圖像。 讀取模式當用戶想要解密消息並查看他看不到的圖像時,因爲encrypte阻止Outlook將本地圖像轉換爲服務器上的數據。

在我的代碼我走體消息這樣的(組成模式)

item.body.getAsync(
         item.body.getAsync(
            "html", 
            { asyncContext: "This is passed to the callback" }, 
            function callback(resultbody) { 

            ......Here we send the body for ENCRYPT. 

       })) 

然後,用戶通過點擊發送encrypte消息「發送」規則。

在讀模式我只是把它打印到我的HTML來檢查decrypte好:

(JSON.parse(xhr.responseText).Data.Content)); 

,然後我得到的圖片的圖標,但沒有成功展現真實照片。 圖標的SRC是怎麼回事了,不是爲他訪問的地方..

<img src="https://attachment.outlook.office.net/owa/*****/service.svc/s/GetFileAttachment?id=AAMkADUwMDE0YWM1LTYwODctNG ...... 

我怎麼能採取像這個標籤,並做一些事情,接收器可以看到的形象呢?我不希望該用戶將需要從我的加載項中將圖像上傳到正文,而不是原始Outlook。我嘗試將圖像轉換爲base-64字符串,但是與標記中的內容不夠,只是使用原始圖片,並且它成功顯示在html中,但不能與SetAsync函數一起顯示在消息正文中。

2.第二個問題是附件。 我使用dropzone插件上傳文件(因爲Outlook不允許訪問獲取附件並將​​其更改)。所以,當我上傳文件和encrypte他,我做了一些新的文件從服務器與JS的文件API響應:

ar f = new File([""], "filename.txt", {type: "text/plain", lastModified: date}) . .. . 

比我要附加的文件,以郵件,這樣做的唯一方法,這是:

addFileAttachmentAsync(uri, attachmentName, optionsopt, callback opt) 

然後,我需要所以我用這個方法來創建文件中查找該方法的網址:

var objectURL = URL.createObjectURL(f); 

但現在,當我使用的方法與addFileAttachmentAsync的ObjectURL它寫有一個問題,它不能附加它,我認爲該網址是不正確的。

謝謝大家!

回答

1

對於每個看這個問題的任何解決方案的人..

**在outlook web中,這個解決方案效果很好,但是在Outlook桌面中存在與服務器同步的問題,所以現在沒有任何解決方案的saveAsync函數會有延遲,所以它可以工作,但需要等一下bit.You可以閱讀更多關於它here

第一個問題:

有是Outlook插件中的問題用getAsync時再setAsync功能用。當身體內有一些圖像時會出現問題。發生這種情況的原因是,當你以Html格式獲取身體,然後用一些不同的圖像返回身體仍然不能「上傳」,並且src錯誤。 我成功解決了使用Outlook rest API這個問題。 因此,解決方法是這樣的:

  1. 通過getAsync方法獲取Html類型的正文消息。創建div 元素並在div內設置返回正文消息。
  2. 要獲取消息ID,需要使用saveAsync函數將消息另存爲草稿。
  3. 要向Outlook休息請求 API,您需要獲取訪問令牌,因此請調用getCallbackTokenAsync函數並保存訪問 令牌。
  4. 使Http Request to Outlook rest API獲取所有附件中存在的 的消息。
  5. 找到您的圖像的正確ID,並將圖像src替換爲從您的請求獲得的圖像的 base-64到其餘的 API。
  6. 最後,您可以使用SetAsync函數設置您的新身體。

代碼:

item.body.getAsync(
Office.CoercionType.Html, 
{ asyncContext: "This is passed to the callback" }, 
function callback(resultbody) { 
    var bodyDiv = document.createElement('div'); 
    bodyDiv.innerHTML = content; 
    Office.context.mailbox.item.saveAsync(
    function callback(result) { 
    var myNewItemSaved = result.value;                        
    Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, 
    function (result) { 
     if (result.status === "succeeded") { 
      var accessToken = result.value; 
      var itemId = ""; 
      if (Office.context.mailbox.diagnostics.hostName === 'OutlookIOS') 
      itemId = Office.context.mailbox.item.itemId; 
      else  
      itemId = Office.context.mailbox.convertToRestId(myNewItemSaved, 
        Office.MailboxEnums.RestVersion.v2_0); 

     var xhr3 = new XMLHttpRequest(); 
     xhr3.open("GET", "https://outlook.office.com/api/v2.0/me/messages/" + itemId + "/attachments", true); 
     xhr3.setRequestHeader("Content-type", "application/json"); 
     xhr3.setRequestHeader("Access-Control-Allow-Origin", "*"); 
     xhr3.setRequestHeader("Authorization", "Bearer " + accessToken); 
     xhr3.send(); 
     xhr3.onreadystatechange = function() { 
     if (xhr3.readyState == 4) { 
     if (xhr3.status == 200) { 
      var allImages = JSON.parse(xhr3.response).value; 
      var isDesktop = false; 
      var imgSrcId = bodyDiv.getElementsByTagName('img')[0].getAttribute("src"); 
      if (imgSrcId.indexOf("cid") != -1) //Outlook Desktop 
        isDesktop = true; 
      for (var i = 0; i < allImages.length; i++) { 
       if (bodyDiv.getElementsByTagName('img')[i].getAttribute("src").indexOf("base64")!=-1) 
        continue; 
      if (isDesktop) 
      imgSrcId = bodyDiv.getElementsByTagName('img')[i].getAttribute("src"); 
      else 
       imgSrcId = bodyDiv.getElementsByTagName('img'[i].getAttribute("originalsrc");                             

      imgSrcId = imgSrcId.substr(4, imgSrcId.length); 

      var wantedImg; 
      for (var j = 0; j < allImages.length; j++) { 
      if ((allImages[j].ContentId).localeCompare(imgSrcId) != -1) { 
          wantedImg = allImages[j]; break;} 
      } 
     bodyDiv.getElementsByTagName('img')[i].src = 'data:' + wantedImg.ContentType + ';base64,' + wantedImg.ContentBytes; 
     } 
    } 
    setAsync...... 

    } 
    }}}})})}; 

第二個問題

與addFileAttachmentAsync的問題,這僅僅是對文件的工作,是在外部服務器上,並且它不添加一個blob,本地文件。 因此,這裏的解決方案是使用Outlook rest API。該解決方案將我們的文件附加到消息中,但我們無法看到這一點 - 沒有預覽消息中的附件,但是當我們發送它時,這將附加到消息,並且我們可以在消息中看到附件在那裏。 解決方案與正文中的圖像非常相似 - 將消息另存爲草稿,獲取訪問令牌,並且此時Http請求將成爲我們消息ID的'POST'請求,以將我們的文件附加到當前消息。

代碼,以添加附件消息的請求(所有的方式,直到這裏是同樣喜歡的問題1):

var attachment ={ 
    "@odata.type": "#Microsoft.OutlookServices.FileAttachment", 
     "Name": "smile.png", 
     "ContentBytes": "AAACFAMxLjAeKUDndY7EKF4P7QiWE7HgHLa7UiropGUTiDp5V07M0c5jaaTteauhzs0hOU+EOmVT0Lb6eSQ2MzgkCre/zCV9+kIB9PjWnOzoufau67J9PQdXapsOQSMcpt9X2QpcIjnl7H3sLu9iu2rqcvSjwhDnK6JygtghUB405EZHZ9LQcfJ1ZTYHylke2T9zbViq2BPqU/8IHZWsb/KQ/qzV4Jwv3NHnI583JvOuAtETJngh964edC4cU2IY6FkIWprksRw7d4fEQ/+3KbEyW0trIZm59jpTSV01/PhOI0RDKj1xI1Vr+lgMRZpOrYDfChWWWbByNzSXbIsTjHMU6GmQ5Cb09H3kv/2koFa5Pj2z8i+NGywYKw8ZSu3NVblM9I0EkQVLrxkM8gqyrDEtAobxPRxEzGTEXdnjws5UIiiGFBq3khuxejFGCNvUbmPM9guVZO0ccDe1FICTFHkrPlLZW/TvJYMou0HBrvH7s4taBHyZw5x03dhps+WG19D5na44vaVX2Vni6ZrrxfqFo7JTUpCJxCcPyoG7/nEWtJ/V/J+oXdypeapN9Agl6Q81WvCbzuyZgbLTfj6NXWDoliie069Hvk/k2lP+HyO7Iu5ffeRX2WWguwdfGXiNbqInrxn18tX+N7/KqWbRJv96tmijdCmCvsF9Lpr9k7QFKB93wuHfTuE6Qi2IVNBfzNBaz1iJYjY=" 
    } 
    var xhr4 = new XMLHttpRequest();    
    xhr4.open("POST", "https://outlook.office.com/api/v2.0/me/messages/" + itemId + "/attachments", true); 
    xhr4.setRequestHeader("Content-type", "application/json"); 
    xhr4.setRequestHeader("Access-Control-Allow-Origin", "*"); 
    xhr4.setRequestHeader("Authorization", "Bearer " + accessToken); 
    xhr4.send(JSON.stringify(attachment)); 
    xhr4.onreadystatechange = function() {                          
        if (xhr4.readyState == 4) { 
        if (xhr4.status == 200) 
          console.log("ok"); 
        else 
          console.log(xhr4.response); 
        }};                

希望這會幫助別人,祝你好運!