You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Outlook插件开发技术咨询:回调令牌端点与无SSO获取联系人

问题解答

1. Office.context.mailbox.getCallbackTokenAsync() 获取的令牌可调用的端点

通过这个方法获取的是EWS(Exchange Web Services)回调令牌,仅能用于访问与当前Outlook上下文绑定的资源,支持的EWS操作包括:

  • 获取当前打开的邮件、日历事件、联系人项的详情(对应EWS的GetItem操作)
  • 查询当前邮箱内与上下文项相关的子资源(比如邮件附件、日历与会者,对应FindItem操作,但查询范围受限,无法全局遍历邮箱所有文件夹)
  • 修改当前上下文关联的项(比如编辑邮件内容、添加附件,对应UpdateItem操作)
    注意:该令牌不支持调用Microsoft Graph API,权限严格限定在当前插件会话的上下文资源范围内。

2. 无需SSO获取登录用户联系人的方法

存在两种无需依赖SSO的实现方式,均依托Outlook插件上下文:

方式一:用Office.context.mailbox.makeEwsRequestAsync()发送EWS请求

构造EWS的FindItem请求,查询用户的默认联系人文件夹,示例代码如下:

// 构造EWS请求XML,查询默认联系人文件夹的前100个联系人
const ewsRequest = `<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
               xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
  <soap:Header>
    <RequestServerVersion Version="Exchange2013" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" soap:mustUnderstand="0"/>
  </soap:Header>
  <soap:Body>
    <FindItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages" Traversal="Shallow">
      <ItemShape>
        <t:BaseShape>Default</t:BaseShape>
        <t:AdditionalProperties>
          <t:FieldURI FieldURI="contacts:EmailAddress1"/>
          <t:FieldURI FieldURI="contacts:GivenName"/>
          <t:FieldURI FieldURI="contacts:Surname"/>
        </t:AdditionalProperties>
      </ItemShape>
      <ParentFolderIds>
        <t:DistinguishedFolderId Id="contacts"/>
      </ParentFolderIds>
      <MaxEntriesReturned>100</MaxEntriesReturned>
    </FindItem>
  </soap:Body>
</soap:Envelope>`;

// 发送EWS请求
Office.context.mailbox.makeEwsRequestAsync(ewsRequest, function(result) {
  if (result.status === "succeeded") {
    // 解析返回的XML数据,提取联系人信息
    const xmlDoc = new DOMParser().parseFromString(result.value, "text/xml");
    // 自定义处理逻辑
  } else {
    console.error("EWS请求失败:", result.error);
  }
});

该方法由插件上下文自动处理认证,无需手动获取令牌,可访问用户联系人文件夹内的全量联系人。

方式二:用Office.context.mailbox.getContactsAsync()(仅特定场景可用)

如果插件处于邮件撰写场景,可调用该方法获取用户最近使用的联系人列表,示例代码:

Office.context.mailbox.getContactsAsync({count: 50}, function(result) {
  if (result.status === "succeeded") {
    const contacts = result.value;
    contacts.forEach(contact => {
      console.log("联系人:", contact.displayName, contact.emailAddress);
    });
  } else {
    console.error("获取联系人失败:", result.error);
  }
});

注意:该方法仅能获取最近使用的联系人,无法获取联系人文件夹中的全部资源。

内容的提问来源于stack exchange,提问作者MatejDodevski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 14:25:18