如何从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
相关产品推荐
相关产品推荐

