Azure Logic Apps服务账户无法获取审批人邮箱(UserEmailAddress显示Null)
一、服务账号下UserEmailAddress为Null的解决方法
检查并配置服务账号的Graph API权限
确保服务账号拥有User.Read.All或Directory.Read.All的应用权限(而非委托权限),并完成管理员同意。Logic Apps通过服务账号调用审批动作时,需要该权限读取用户信息以填充邮箱字段。改用
Response Originator字段获取信息
当UserEmailAddress为空时,尝试从审批动作的输出中提取Response Originator字段。该字段通常返回审批人的用户主体名称(UPN),格式类似user@domain.com,可直接作为邮箱地址使用。调用Microsoft Graph API获取用户邮箱
如果审批动作仅返回用户ID(如Response Originator ID),可添加Microsoft Graph > Get user动作:- 选择
Get user动作,在User ID框中引用审批输出的Response Originator ID - 从动作返回结果中提取
mail或userPrincipalName字段作为邮箱地址
- 选择
二、邮件转发后获取实际审批人邮箱的解决方法
解析邮件头中的认证用户信息
审批触发后,添加Office 365 Outlook > Get email headers动作,传入审批邮件ID。从返回的邮件头中提取X-MS-Exchange-Organization-AuthUser字段,该字段记录了实际执行审批操作的用户邮箱。可通过表达式直接提取:outputs('Get_email_headers')?['body/X-MS-Exchange-Organization-AuthUser']解析审批回调的HTTP请求内容
若使用自定义审批或HTTP触发的审批,可通过Parse JSON动作解析回调请求的正文。通常回调请求会包含userPrincipalName、email等字段,示例schema如下:{ "type": "object", "properties": { "userPrincipalName": { "type": "string" }, "email": { "type": "string" } } }解析完成后直接引用
email字段即可。启用审批的响应者跟踪选项
创建审批动作时,选择“批准/拒绝 - 高级”类型,勾选“跟踪实际响应者”选项。Logic Apps会自动记录实际点击按钮的用户信息,无需额外解析操作。
内容的提问来源于stack exchange,提问作者sujan suresh

