添加类别并更新自定义属性会导致Outlook 2016桌面中的电子邮件完全损坏

时间:2018-10-18 09:18:27

标签: outlook-addin outlook-restapi

对于我们的加载项,我们使用以下代码将自定义类别添加到当前邮件中。为此,我们使用Office REST API。然后,我们还将在以后使用的电子邮件中更新一些自定义属性。

但是由于某些原因,以下代码导致电子邮件被“更改”。它只会在Outlook桌面客户端中发生,而不会在网络上发生。

我们已经缩小了问题的范围,当我们不更新自定义属性时,问题就消失了。

如果您将以下html文件用作index.html,应该会重现该问题。

<!DOCTYPE html>
<html><head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title></title>


  <script src="https://code.jquery.com/jquery-2.2.1.min.js"></script>
  <script src="//unpkg.com/@microsoft/office-js@1.1.8/dist/office.js"></script>


</head>


<body>

    <div id="test"> Test </div>


    <a href="#" onclick="javascript:setCategoryFunction();">Add category 'my custom category'</a>

</body>


 <script>
 Office.initialize = function(){

     $("#test").html("test example");


    // global function
    window.setCategoryFunction = function(){

        $("#test").html("loading...");

        // get token
        Office.context.mailbox.getCallbackTokenAsync({isRest:true },function(asyncResult){

                 $("#test").html("token result " + JSON.stringify(asyncResult));

                 if (asyncResult.status === "succeeded") {

                        var emailid = Office.cast.item.toItemRead(Office.context.mailbox.item).itemId.replace(/\//g, '-');


                        // This call to Office 365 REST API
                        $.ajax({
                          url : Office.context.mailbox.restUrl+"/v2.0/me/messages/"+emailid,
                          data : "{'Categories':['my custom category']}",
                          type : 'PATCH',
                          contentType : 'application/json',
                          processData: false,
                          dataType: 'json',
                          headers:{
                                "Authorization":"Bearer " + asyncResult.value,
                                'Content-Type': 'application/json'
                          }
                        }).done(function(response) {    

                            // setting category via rest url works
                            $("#test").html("update mail result OK ");

                             // but then update custom properties...
                             Office.context.mailbox.item.loadCustomPropertiesAsync(function(responseProps){

                                  var props = {};
                                  props["customproperty"] = "mycustomprop_data";

                                  var propsArray = responseProps.value.get("myprops") || [];
                                  propsArray.push(props);                 
                                  responseProps.value.remove("myprops");
                                  responseProps.value.set("myprops",propsArray);


                                  // Save all custom properties to server.
                                  responseProps.value.saveAsync(function(){


                                      $("#test").html("Now this e-mail is corrupt ??");

                                  });

                              });


                        }, function(err){

                            $("#test").html("error:<br> " + JSON.stringify(response));


                        });



                 }

        });

    }
 }



 </script>

</html>

0 个答案:

没有答案