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

使用Office.js API兼容低版本邮箱获取原始邮件头

适配Outlook 邮箱要求集1.4版本的邮件头获取方案

核心实现思路

由于getAllInternetHeadersAsync仅支持1.8及以上版本要求集,可使用1.4版本原生支持的Office.context.mailbox.makeEwsRequestAsync接口发起EWS请求获取邮件头,该接口是Office.js内置封装能力,不需要额外调用外部REST API,完全符合需求限制。

实现步骤

  • 第一步:添加清单权限声明
    确保加载项的Manifest清单文件中配置了至少ReadItem级别的权限,满足EWS请求访问当前邮件属性的要求。
  • 第二步:做版本兼容判断
    先判断当前环境是否支持getAllInternetHeadersAsync,支持则直接调用原生高版本接口,不支持则走EWS降级逻辑,兼顾网页端和桌面端的运行效率。
  • 第三步:构造EWS请求并解析结果
    编写获取Internet邮件头的SOAP请求,通过makeEwsRequestAsync发起请求后,解析返回的XML数据提取所需的头信息。

代码示例

// 统一获取邮件头入口
function getEmailHeaders(callback) {
  // 优先调用高版本原生接口
  if (Office.context.mailbox.item.getAllInternetHeadersAsync) {
    Office.context.mailbox.item.getAllInternetHeadersAsync((asyncResult) => {
      if (asyncResult.status === Office.AsyncResultStatus.Succeeded) {
        callback(null, asyncResult.value);
      } else {
        callback(asyncResult.error, null);
      }
    });
    return;
  }

  // 1.4版本降级走EWS请求逻辑
  const ewsSoapRequest = `<?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>
      <t:RequestServerVersion Version="Exchange2013" />
    </soap:Header>
    <soap:Body>
      <GetItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">
        <ItemShape>
          <t:BaseShape>IdOnly</t:BaseShape>
          <t:AdditionalProperties>
            <t:FieldURI FieldURI="item:InternetMessageHeaders" />
          </t:AdditionalProperties>
        </ItemShape>
        <ItemIds>
          <t:ItemId Id="${Office.context.mailbox.item.itemId}" />
        </ItemIds>
      </GetItem>
    </soap:Body>
  </soap:Envelope>`;

  Office.context.mailbox.makeEwsRequestAsync(ewsSoapRequest, (asyncResult) => {
    if (asyncResult.status !== Office.AsyncResultStatus.Succeeded) {
      callback(asyncResult.error, null);
      return;
    }
    // 解析返回XML提取邮件头
    const parser = new DOMParser();
    const xmlDoc = parser.parseFromString(asyncResult.value, "text/xml");
    const headerElements = xmlDoc.getElementsByTagName("t:InternetMessageHeader");
    const headers = {};
    for (let i = 0; i < headerElements.length; i++) {
      const headerName = headerElements[i].getAttribute("HeaderName");
      const headerValue = headerElements[i].textContent;
      headers[headerName] = headerValue;
    }
    callback(null, headers);
  });
}

// 调用示例
getEmailHeaders((err, headers) => {
  if (err) {
    console.error("获取邮件头失败:", err);
    return;
  }
  // 业务逻辑处理邮件头
  console.log("邮件头信息:", headers);
});

注意事项

  • 该方案仅适用于基于Exchange架构的Outlook环境,目前主流桌面端Outlook均支持该能力
  • 可根据业务需要调整XML解析逻辑,也可以将提取的头信息拼接为原始字符串格式使用
  • 如果是群发类邮件,可额外扩展请求参数获取更多扩展属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:09:00