0

私は自分の問題を解決しようとしましたが、どこにも見つからなかったので、ここの誰かが私を救うことができると願っています。outlookアドイン画像とファイル

ボディメッセージを暗号化して解読するVS2015のJavaScriptにアドインを書きます。

1.最初の問題は、受信者が見ることができない画像であることです。 作曲モード (ボタン「画像をインラインで挿入」によって体内にコピーした画像についての講演)

私たちがメッセージをencrypte、我々はdecrypte時にコンモードは、クライアント側であり、彼ので、それが良い作品です彼は地元のイメージを認識します。 読み取りモードユーザーがメッセージを復号化し、見えなかった画像を見たい場合、暗号化によって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メッセージを送信します。読み取りモードで

私はちょうどdecrypteが良いかどうかを確認するために私のHTMLにそれを印刷:

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

、その後、私は本当の写真を表示するには画像のアイコンではなく、成功を得ます。 アイコンのsrcが彼のためにはアクセスしない場所のために起こっている。..

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

がどのように私はこの画像のタグを取得し、受信機が画像を見ることができる何かを行うことができますか?私はそのユーザーが元の見通しの代わりに自分のアドインから身体に画像をアップロードする必要があることを望んでいません。私はベース64文字列に画像を変換しようとするが、私はそれだけでは元の画像だけでなく、HTMLで表示するには成功したが、SetAsync関数を使ってメッセージの本文にタグを持っている。

2. 2番目の問題は添付ファイルにあります。 私はdropzoneプラグインでファイルをアップロードします(Outlookは添付ファイルを取得して変更するためのアクセス権を与えないため)。私はメールにファイルを添付したいので、これを行う唯一の方法があるよりも、

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

:私はファイルをアップロードし、彼をencrypte後だから、私はJSのファイルAPIを使用してサーバからの応答を持ついくつかの新しいファイルを作成します:

var objectURL = URL.createObjectURL(f); 

しかし、今、私がいるObjectURLとメソッドaddFileAttachmentAsyncを使用する場合、それがいることを記述しています:

addFileAttachmentAsync(uri, attachmentName, optionsopt, callback opt) 

はその後、私はこの方法を使用するように、この方法のためにファイルのURLを作成する必要があります問題があり、それを添付できない場合は、URLが間違っていると思います。

ありがとうございました!

答えて

1

この問題の解決策を探すすべての人に

** Outlook Webでは、このソリューションはうまくいきますが、Outlookデスクトップではサーバーと同期する問題がありますので、saveAsync関数ではこれが解決されずに遅れているため、少し時間がかかりますあなたはそれについてもっと読むことができるhere

最初の質問:

見通しの問題は、アドインgetAsyncを使用して、setAsync機能する場合とがあります。この問題は、体内に何らかのイメージがある場合に発生します。これは、あなたがHTML形式で本文を取得してから、別のイメージを使ってボディを返すときに、まだ 'アップロード'されず、srcが間違っているために起こります。 Outlook rest APIを使用してこの問題を回避するには成功しました。 回避策は次のようになります。

  1. getAsyncメソッドを使用してHtmlの種類の本文メッセージを取得します。 div 要素を作成し、div内に戻り本文メッセージを設定します。
  2. メッセージIDを取得するには、メッセージをsaveAsync関数を含む下書きとして保存する必要があります。
  3. Outlook rest APIをリクエストするには、アクセストークンを取得する必要があります。そのため、getCallbackTokenAsync関数を呼び出して、アクセス トークンを保存してください。
  4. Httpを作成するすべての添付ファイルを取得するためにoutlook rest APIへのリクエストは、 メッセージに存在します。
  5. 画像の正しいIDを見つけ、画像srcを、あなたのリクエストから得た画像の ベース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...... 

    } 
    }}}})})}; 

2番目の質問

これが唯一の外部サーバー上にあるファイルとの仕事であり、それはブロブ、ローカルファイルを追加していないことをaddFileAttachmentAsyncでの問題。 解決方法はOutlook rest APIです。解決策はメッセージにファイルを添付しますが、メッセージに添付ファイルのプレビューは表示されませんが、メッセージを送信するとメッセージに添付され、メッセージに添付ファイルがあることがわかります。 解決策は実際には本文の画像に似ています - ドラフトとしてメッセージを保存し、アクセストークンを取得し、今回はHttp Requestが私たちのメッセージIDに 'POST'リクエストを出して現在のメッセージにファイルを添付します。

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

が、それは誰か、幸運を助けるのご希望:メッセージに添付ファイルを追加する要求に

コード(ここまでのすべての方法は、同じような質問1です)!

関連する問題