如何使用Office JS将所选邮件接收时间写入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
相关产品推荐
相关产品推荐

