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

如何使用Office JS将所选邮件接收时间写入SharePoint列表

Outlook Script Lab 实现邮件数据写入SharePoint列表方案

整体实现分两步完成:先通过Office JS API读取选中邮件的目标属性,再调用SharePoint REST接口把数据写入提前建好的列表。


第一步:读取邮件核心数据

直接调用Outlook Mailbox API即可拿到所需字段,Script Lab默认已开通基础邮件读取权限,不需要额外做复杂配置:

Office.onReady(() => {
  // 绑定Script Lab默认Run按钮的触发事件
  document.getElementById("run").addEventListener("click", exportMailToSP);
});

async function exportMailToSP() {
  const currentMail = Office.context.mailbox.item;
  // 组装需要的邮件字段
  const mailPayload = {
    subject: currentMail.subject,
    sender: currentMail.from.emailAddress,
    // 接收时间转ISO格式,适配SharePoint日期字段格式要求
    receivedTime: currentMail.dateTimeReceived.toISOString(),
    // 读取HTML格式邮件正文,需要纯文本把CoercionType改成Text即可
    mailContent: await new Promise(resolve => {
      currentMail.body.getAsync(Office.CoercionType.Html, res => resolve(res.value));
    }),
    // 读取全量邮件头
    mailHeaders: await new Promise(resolve => {
      currentMail.getAllInternetHeadersAsync(res => resolve(res.value));
    })
  };
  // 调用写入方法
  await saveToSPList(mailPayload);
}

第二步:写入SharePoint列表

客户端环境下直接携带当前登录用户的身份凭证调用SPO REST接口即可,不需要单独走复杂的OAuth授权流程:

async function saveToSPList(mailData) {
  // 替换成自己的租户站点地址和目标列表名
  const spSite = "https://你的租户名.sharepoint.com/sites/目标站点名";
  const targetListName = "存储邮件数据的列表名";
  const apiEndpoint = `${spSite}/_api/web/lists/getbytitle('${targetListName}')/items`;

  // 先获取SP接口POST请求必须的表单摘要
  const digestRes = await fetch(`${spSite}/_api/contextinfo`, {
    method: "POST",
    credentials: "include",
    headers: { "Accept": "application/json;odata=nometadata" }
  });
  const { FormDigestValue } = await digestRes.json();

  // 构造列表项写入参数,注意提前在列表里建好同名字段
  const listItemPayload = {
    __metadata: { type: `SP.Data.${targetListName}ListItem` },
    Title: mailData.subject,
    Sender: mailData.sender,
    ReceivedTime: mailData.receivedTime,
    MailContent: mailData.mailContent,
    // 邮件头转成字符串存储,避免对象结构不匹配报错
    MailHeaders: JSON.stringify(mailData.mailHeaders)
  };

  const writeRes = await fetch(apiEndpoint, {
    method: "POST",
    credentials: "include",
    headers: {
      "Accept": "application/json;odata=nometadata",
      "Content-Type": "application/json;odata=nometadata",
      "X-RequestDigest": FormDigestValue
    },
    body: JSON.stringify(listItemPayload)
  });

  if (!writeRes.ok) {
    const err = await writeRes.text();
    console.error("写入失败:", err);
    return;
  }
  console.log("邮件数据已成功写入SharePoint列表");
}

注意事项

  • 提前在目标SharePoint站点创建对应列表,添加和代码中字段名一致的列:Sender(单行文本)、ReceivedTime(日期时间)、MailContent(多行富文本)、MailHeaders(多行文本)
  • 不要硬编码RequestDigest值,该值有效期约30分钟,每次写入前动态获取即可
  • 如果出现跨域拦截,把Script Lab的域名加到目标SharePoint站点的「HTML字段安全」信任域名列表里即可,Script Lab属于微软官方加载项,默认在多数企业租户的信任列表中
  • 如果邮件正文长度超过SharePoint多行文本字段限制,可以把正文单独存为.eml附件上传到列表附件栏,避免写入失败
  • 如果读取邮件头时报权限错误,在Script Lab的清单配置页确认Mailbox.ReadWrite.User权限已开启即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:48:45