Надстройка Outlook с различным поведением между клиентским рабочим столом и веб-версией при перемещении почты в папку нежелательной почты

#azure #outlook #microsoft-graph-api #outlook-addin #outlook-web-addins

Вопрос:

Я сталкиваюсь с проблемой уже несколько недель, и мне действительно нужна ваша помощь.

В настоящее время я разрабатываю надстройку Outlook на Javascript для кода Visual Studio, сгенерированного с помощью Yeoman (yo office) для моей компании, которая должна перемещать почту в папку нежелательной почты, когда пользователи нажимают кнопку «Выполнить» на панели задач.

Надстройка отлично работает в веб-версии (OWA), когда я нажимаю кнопку «Выполнить», но не на настольном клиенте. В настольном клиенте он открывает новую вкладку в моем браузере по умолчанию (Chrome) и перенаправляет меня в HTML-файл моей панели задач.

Надстройка размещена в Azure, но в учетной записи хранилища («.z6.web.core.windows.net/», не «.azurewebsites.com/»), и приложение зарегистрировано в Azure. При регистрации приложения я создал две платформы, одну для Интернета и одну для настольной версии (собственное приложение), но я не уверен, что это правильный способ сделать это. Идентификатор и маркеры доступа включены для неявных и гибридных потоков и настроены как уникальный клиент. Потоки публичных клиентов запрещены.

Я создал новый проект, чтобы показать вам свою проблему, это код :

 import {UserAgentApplication} from "msal";
import {ImplicitMSALAuthenticationProvider} from "@microsoft/microsoft-graph-client";
import {MSALAuthenticationProviderOptions} from "@microsoft/microsoft-graph-client";
import {Client} from "@microsoft/microsoft-graph-client";

/* global document, Office */

Office.onReady((info) => {
  if (info.host === Office.HostType.Outlook) {
    document.getElementById("sideload-msg").style.display = "none";
    document.getElementById("app-body").style.display = "flex";
    document.getElementById("run").onclick = run;
  }
});

export async function run() {
  // Configuration Microsoft Graph 
  const msalConfig = {
    auth: {
      clientId: "<client-ID>",
      redirectUri: "https://synphishtest.z6.web.core.windows.net/",
      authority: "https://login.microsoftonline.com/<tenant-ID>/",
      scopes : "user.read, mail.readwrite",
      loginType: "redirect"
    }
  };

  // Connect to MS Graph
  const graphScopes = ["user.read", "mail.readwrite"];
  const msalApplication = new UserAgentApplication(msalConfig);     
  const options = new MSALAuthenticationProviderOptions(graphScopes);
  const authProvider = new ImplicitMSALAuthenticationProvider(msalApplication,options);
  const MSALoptions = {authProvider};
  const client = Client.initWithMiddleware(MSALoptions);

  // Get the mail ID
  var idMail =  JSON.stringify(Office.context.mailbox.item.itemId).replaceAll('/','-');
  const junkMail = {destinationId: 'junkemail'};

  // Move the mail to the junk folder
  (async () => { 
    await client.api('/me/messages/' idMail '/move').post(junkMail);
  })();

}
 

Я использую модули «msal» версии 1.4.14 и «@microsoft/microsof-graph-клиент» версии 2.2.1.

Поскольку у меня возникли некоторые трудности с отладкой кода VS, я использую предварительный просмотр Microsoft Edge DevTools для «отладки» моей надстройки. Когда он открывает новую вкладку в Chrome, я вижу, что en Edge выдает следующую ошибку : «Ошибка при открытии всплывающего окна. Это может произойти, если вы используете IE или если всплывающие окна заблокированы в браузере». Я не использую Internet Explorer, и всплывающие окна разрешены в Chrome. Однажды я как-то решил эту проблему, но не помню, как я это сделал.

И когда я открываю консоль Chrome на открывшейся новой вкладке, у меня появляется следующее предупреждение : «Office.js загружается за пределами офисного клиента». Таким образом, в настольной версии он открывает новую вкладку и не перемещает мою почту в папку нежелательной почты, но в веб-версии новая вкладка не открывается, и почта перемещается в папку нежелательной почты.

Вкладка открывается только тогда, когда программа находится здесь :

 // Move the mail to the junk folder
  (async () => { 
    await client.api('/me/messages/' idMail '/move').post(junkMail);
  })();
 

Можете ли вы помочь мне сделать так, чтобы моя надстройка работала на настольном клиенте ?
Заранее спасибо за ваши ответы.

Комментарии:

1. Когда вы делаете запрос на публикацию, можете ли вы проверить ответ на наличие успеха/ошибки? Есть ли возвращенная ошибка?

2. Вы также можете попробовать добавить соответствующие домены в раздел <домены приложений> своего манифеста. docs.microsoft.com/en-us/office/dev/add-ins/reference/manifest/…

3. Проблема в том, что запросы, сделанные из настольного клиента и веб-версии, не совпадают с тем, что я вижу на Fiddler.

4. В моем манифесте добавлены 3 ссылки : веб-сайт моей компании, веб-сайт портала поддержки моей компании и ссылка на панель задач моей надстройки ( synphishtest.z6.web.core.windows.net ). Я не понимаю, почему я должен добавлять еще одну ссылку в свой манифест, если он работает в веб-версии.

5. Чем отличается запрос, сделанный из настольного клиента, от веб-версии? Поскольку вы используете одну и ту же надстройку, я ожидаю, что они будут в основном одинаковыми.