首页 > 解决方案 > 通过 Javascript 和 EWS 在 Outlook 缓存模式下设置 HTML

问题描述

我的工作 Outlook 环境正在从在线(连续连接)更改为缓存模式,这破坏了 Outlook 插件的桌面组件,该插件旨在保存并将草稿电子邮件转发到内部安全检查。

我的原始代码将异步保存草稿,然后使用 Id 并更改密钥然后转发它。在缓存模式下,在帐户与 Exchange 同步之前没有 ID。

现在损坏的代码(在缓存模式下不起作用)

   //Save current item as draft
   mailForward.SaveDraftIfNecessary = function SaveDraftIfNecessary() {
       if (_item_id == null || _item_id == undefined) {
           Office.context.mailbox.item.saveAsync(function (asyncResult) {
               if (asyncResult.error) {
                   app.showNotification(_appName, "Error: " + asyncResult.error.message);
               }
               else {
                   _item_id = asyncResult.value;
               }
           });
       }
   };

我已经能够编写可以复制邮件并发送它的代码,但是我需要能够将草稿正文插入到新的电子邮件正文中,但它不接受它。它不适用于文本或 HTML。

获取正文类型和文本的代码如下:

              item.body.getTypeAsync(
                  function (asyncResultGet) {
                      if (asyncResultGet.status === Office.AsyncResultStatus.Failed) {
                          statusUpdate("icon16", asyncResultGet.error.message);
                          stopSpinner();
                      }
                      else {
                          bodyType = asyncResultGet.value;
                          item.body.getAsync(bodyType,
                              function (asyncResultGet) {
                                  if (asyncResultGet.status === Office.AsyncResultStatus.Failed) {
                                      statusUpdate("icon16", asyncResultGet.error.message);
                                      stopSpinner();
                                  }
                                  else {
                                      bodyText = asyncResultGet.value;

我试图用来插入正文的 SOAP。我也尝试过 t:NewBodyContent 而不是 t:Body:

      '               <t:Message>' +
      '                   <t:Subject>' + _subject + '</t:Subject>' +
      '                   <t:Body BodyType="'+ _bodyType +'">' + _bodyText + '</t:Body>' +
      '                   <t:ToRecipients>' + _adddressesSoap + '</t:ToRecipients>' +
      '               </t:Message>' +

标签: javascriptexchangewebservicesoffice-js

解决方案


我的问题是编码。我有一个可能是问题的暗示,但直到我找到这个链接才测试它:

从输入字段读取属性时 HTML 编码丢失

我使用的代码是这样的:

        var htmlEncode = function htmlEncode(s) {
            var ntable = {
                "&": "amp",
                "<": "lt",
                ">": "gt",
                "\"": "quot"
            };
            s = s.replace(/[&<>"]/g, function (ch) {
                return "&" + ntable[ch] + ";";
            });
            s = s.replace(/[^ -\x7e]/g, function (ch) {
                return "&#" + ch.charCodeAt(0).toString() + ";";
            });
            return s;
        };

推荐阅读