从 Outlook Web 插件获取当前邮箱

Get current mailbox from Outlook web addin

我刚找到这个:https://docs.microsoft.com/en-us/office/dev/add-ins/reference/manifest/supportssharedfolders。这告诉我有一种方法可以将插件加载到另一个用户的邮箱中。我已经通过清单激活了该功能,效果很好。

为了让服务器知道在哪里可以找到我目前正在使用的邮件,我需要我当前所在的邮箱名称。所以我检查了我在 Office.context 中获得的属性。似乎没有对当前邮箱的引用。只是 Office.context.mailbox.userProfile.emailAddress 指的是我的登录用户。

由于我需要当前邮箱才能通过Graph/EWS 访问邮件,因此必须有一种读取方式,否则SupportsSharedFolders 将毫无意义。我如何获得当前邮箱 name/ID?

您可以通过调用当前提供用户权限的 item.getSharedPropertiesAsync method. This returns a SharedProperties 对象、所有者的电子邮件地址、REST API 的基础 URL,以及目标邮箱。

以下示例显示如何获取消息或约会的共享属性,检查委托或共享邮箱用户是否具有写入权限,并进行 REST 调用。

function performOperation() {
  Office.context.mailbox.getCallbackTokenAsync({
      isRest: true
    },
    function (asyncResult) {
      if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value !== "") {
        Office.context.mailbox.item.getSharedPropertiesAsync({
            // Pass auth token along.
            asyncContext: asyncResult.value
          },
          function (asyncResult1) {
            let sharedProperties = asyncResult1.value;
            let delegatePermissions = sharedProperties.delegatePermissions;

            // Determine if user can do the expected operation.
            // E.g., do they have Write permission?
            if ((delegatePermissions & Office.MailboxEnums.DelegatePermissions.Write) != 0) {
              // Construct REST URL for your operation.
              // Update <version> placeholder with actual Outlook REST API version e.g. "v2.0".
              // Update <operation> placeholder with actual operation.
              let rest_url = sharedProperties.targetRestUrl + "/<version>/users/" + sharedProperties.targetMailbox + "/<operation>";
  
              $.ajax({
                  url: rest_url,
                  dataType: 'json',
                  headers:
                  {
                    "Authorization": "Bearer " + asyncResult1.asyncContext
                  }
                }
              ).done(
                function (response) {
                  console.log("success");
                }
              ).fail(
                function (error) {
                  console.log("error message");
                }
              );
            }
          }
        );
      }
    }
  );
}