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

如何从SharePoint人员或组字段中提取邮箱地址?

提取People/Group字段中的邮箱地址

嘿,针对你遇到的这个需求,我整理了几个靠谱的方案,从简单的HTML解析到SharePoint原生API都有,你可以根据自己的场景选择:

方案1:通过正则表达式解析span的ID属性

因为你已经拿到了对应的span标签,它的ID里已经包含了格式化后的用户标识,其中就藏着邮箱地址。格式是i:0#.f|membership|email@mydomain.com,我们可以用正则直接匹配出邮箱部分:

// 假设你已经获取到了对应的span元素
const spanElement = document.getElementById('Notificar_x0020_a_084ffd45-b361-458e-b55f-c824ba8995ec_$ClientPeoplePicker_i:0#.f|membership|email@mydomain.com_ProcessedUser0_UserDisplay');
// 定义正则匹配邮箱部分
const emailRegex = /i:0#\.f\|membership\|([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/;
const matchResult = spanElement.id.match(emailRegex);
if (matchResult && matchResult[1]) {
  const userEmail = matchResult[1];
  console.log('提取到的邮箱:', userEmail); // 输出 email@mydomain.com
}

方案2:借助SharePoint Client People Picker原生API(更可靠)

如果你的页面里用的是SharePoint自带的Client People Picker控件,直接用原生API获取用户信息会比解析HTML更稳定,不用担心HTML结构变化:

// 获取People Picker控件实例,控件的前缀是字段的内部名称,这里是Notificar_x0020_a
const peoplePicker = SPClientPeoplePicker.SPClientPeoplePickerDict.Notificar_x0020_a_TopSpan;
// 获取已解析的用户信息
const users = peoplePicker.GetAllUserInfo();
if (users.length > 0) {
  // 第一个用户的邮箱地址
  const userEmail = users[0].EntityData.Email;
  console.log('提取到的邮箱:', userEmail);
}

注意:这个方法需要确保页面已经加载了Client People Picker的相关脚本,一般在SharePoint表单页面里是默认加载的。

方案3:如果是在SPFx或者现代页面中

如果你是在SPFx WebPart里处理,可以用PnP JS来获取People字段的完整用户信息,直接拿到邮箱:

import { sp } from "@pnp/sp";

// 假设你已经获取了当前列表项的ID
const itemId = ctx.CurrentItem.ID;
// 获取列表项的People字段完整信息
const listItem = await sp.web.lists.getByTitle('你的列表名称').items.getById(itemId).select('Notificar_x0020_a/Email').expand('Notificar_x0020_a')();
// 提取邮箱
const userEmail = listItem.Notificar_x0020_a.Email;
console.log('提取到的邮箱:', userEmail);

这些方案里,我更推荐用原生API或者PnP JS的方式,因为解析HTML容易受页面结构变化影响,稳定性差一些。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:28:55