0

Я пытаюсь найти решение моих проблем, но не нашел нигде, надеюсь, что кто-то здесь может спасти меня.внешний вид изображения и файлы

Я пишу надстройку в JavaScript на VS2015, которая шифрует и дешифрует сообщения тела.

1. Первая проблема связана с изображениями, которые ресивер не видит. (Обсуждение об изображениях, которые копируют в тело с помощью кнопки «вставить изображение инлайн»)

В режиме Compose мы 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, нажав кнопку «отправить» регулярно.

В режиме чтения я просто распечатать его на мой HTML, чтобы проверить, если decrypte хорошо:

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

, а затем я получить значок изображения, но не успех, чтобы показать реальную рис. СРК иконы собирается на месте, не доступ к нему ..

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

Как я могу принять этот тег изображения и сделать что-то, что получатель может видеть изображение? Я не хочу, чтобы пользователю нужно было загружать изображение в тело из моей надстройки вместо исходного Outlook. Я пытаюсь преобразовать изображение в строку base-64, но с тем, что у меня есть в теге, этого недостаточно, просто с оригинальной картиной, а также с успехом показать в html, но не в теле сообщения с функцией SetAsync.

2. Вторая проблема связана с приложениями. Я загружаю файлы с помощью плагина dropzone (потому что внешний вид не дает доступа к приложению и его изменению). Таким образом, после того как я загружать файлы и encrypte его я сделать какой-то новый файл с ответом от сервера с File API из JS:

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

, чем я хочу, чтобы прикрепить файл к почте, так что единственный способ, сделать это :

addFileAttachmentAsync(uri, attachmentName, optionsopt, callback opt) 

тогда, мне нужно, чтобы создать URL для файла для этого метода, поэтому я использую этот метод:

var objectURL = URL.createObjectURL(f); 

Но теперь, когда я использую метод addFileAttachmentAsync с objectURL это написать, что есть проблема, и ее нельзя ее прикрепить, я думаю, что URL-адрес неверен.

Спасибо всем!

ответ

1

Для всех, кто ищет решение этой проблемы ..

** В Outlook Web это решение работает хорошо, но в Outlook Desktop возникает проблема синхронизации с сервером, поэтому есть функция с задержкой с функцией saveAsync без какого-либо решения для этого прямо сейчас, поэтому это работает, но нужно немного подождать bit.You мог бы узнать больше об этом here.

Первый вопрос:

Существует проблема в надстройки Outlook с при использовании getAsync, а затем функции setAsync. Проблема возникает, когда в теле есть какое-то изображение. Это происходит потому, что, когда вы принимаете тело в формате Html, а затем возвращаете тело с каким-то другим изображением, все еще не «загружаете», а src ошибается. Успех для решения этой проблемы с помощью API внешнего вида Outlook. Так что обходной путь будет так:

  1. Получить сообщение тела в типе Html методом getAsync. создайте элемент div и установите сообщение тела возврата внутри div.
  2. Чтобы получить идентификатор сообщения, вам необходимо сохранить свое сообщение в виде черновика с функцией saveAsync.
  3. Чтобы запросить внешний вид Outlook API, вам необходимо получить токен доступа, поэтому вызовите функцию getCallbackTokenAsync и сохраните доступ к токену .
  4. Сделайте запрос Http для внешнего вида API для получения всех вложений в сообщении .
  5. Ищите правильный идентификатор вашего изображения и заменяйте изображение 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...... 

    } 
    }}}})})}; 

Второй вопрос

Проблема с addFileAttachmentAsync, что это работает только с файлами, которые на внешнем сервере, и это не добавляет блоб, локальные файлы. Так же и здесь решение с API внешнего вида Outlook. Решение добавит наш файл в сообщение, но мы не видим этого - нет предварительного просмотра вложения в сообщении, но когда мы его отправим, он будет прикреплен к сообщению, и мы могли бы видеть в нашем сообщении, что вложение есть. Решение действительно похоже на одно изображение в теле. Сохраните сообщение в виде черновика, получите токен доступа, и на этот раз запрос Http будет «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); 
        }};                

Надеется, что это поможет кому-то, удачи!

 Смежные вопросы

  • Нет связанных вопросов^_^