0

Следующая строка делает надстройку неактивной на клиентах Mac. Надстройка работает совершенно нормально на mac-клиенте, если мы удалим эту строку и непосредственно выполним функцию someFunction.лучший способ получить URL-адреса из почтового ящика

Office.context.mailbox.item.body.getAsync ("html", someFunction);

Мы использовали body.getAsync(), потому что нам нужно извлечь все URL-адреса в тело письма, обработав html и те URL-адреса, содержащие определенные идентификаторы.

попытался использовать нижеследующее, но не дал ожидаемых URL.

var links = Office.context.mailbox.item.getEntities(). Urls;

Я также пытаюсь следующий

Office.initialize = function (reason) { 
    $(document).ready(function() { 
     app.initialize(); 
     Office.context.mailbox.item.body.getAsync("html", processHtmlBody); 
    }); 
}; 

function processHtmlBody(asyncResult) { 
    var htmlParser = new DOMParser().parseFromString(asyncResult.value, "text/html"); 
    var links = htmlParser.getElementsByTagName("a");  
} 

Есть ли лучшая альтернатива для извлечения URL-адреса из тела письма.

ответ

0

Мы попробовали обе альтернативы/обходные пути с makeEwsRequestAsync() и getEntities().urls, чтобы получить URL-адреса из почтового ящика на клиенте Mac. Но оба они не были успешными:

  • makeEwsRequestAsync(): «Отсутствие данных».
  • getEntities().urls: не дали желаемого результата/URL-адресов

Так для Mac клиента, мы в конечном итоге изменения логики и добавил условную логику, которая не включала какой-либо код для извлечения URL.

, если (Office.context.requirements.isSetSupported ("почтовый ящик", 1.3))
{
// условный код

}

1

Обратите внимание, что getAsync является частью 1,3 почтового ящика набор требований, которые Перспективы Mac не поддерживает:

https://dev.outlook.com/reference/add-ins/tutorial-api-requirement-sets.html

В противном случае с помощью сущностей является единственным вариантом, но getElementsByTagName вероятно, будет работать лучше всего (если у вас есть доступ к телу электронной почты).

+0

makeEwsRequestAsync() не дает ожидаемого результата, так как он i s на Office.context.mailbox не на элемент. Он не извлекает то же, что и getAsync(). Мы что-то упускаем? –

+0

Это зависит от того, какую операцию EWS вы вызываете с помощью makeEwsRequestAsync(). Например, вы можете вызвать GetItem, чтобы получить тело сообщения текущего или любого другого (при наличии идентификатора). –

+0

Идентификатор электронной почты? –

0

Я имел такую ​​же проблему, и я разрешил его аналогичным образом:

return new Promise((resolve, reject) => { 
    mailbox.item.body.getAsync(window.Office.CoercionType.Html, asyncResult => { 
     if (asyncResult.status == window.Office.AsyncResultStatus.Succeeded) { 
      var $dom = $(asyncResult.value); 
      var url = $dom.find('#x_hiddenURL').text(); 

      resolve(url); 
     } else { 
      reject(new Error('Failed to load email body')); 
     } 
    }); 
}); 
Смежные вопросы