对于我们的加载项,我们使用以下代码将自定义类别添加到当前邮件中。为此,我们使用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>