如何通过Azure Logic Apps使用Microsoft Graph API从共享邮箱发送邮件
借助Azure Logic Apps通过Microsoft Graph API以共享邮箱身份发送邮件(系统分配身份)
完全可以实现,以下是具体步骤:
1. 为Logic App的系统分配身份授予Microsoft Graph应用权限
系统分配的托管身份需要应用类型的Mail.Send权限(而非委托权限),才能调用Graph API发送邮件:
- 登录Azure门户,找到你的Logic App,进入「身份」→「系统分配」→点击「Azure AD角色和管理员」。
- 点击「添加角色分配」,在「资源类型」中选择「Microsoft Graph」,然后搜索并选择「Mail.Send」权限(确保是应用权限,不是委托权限),完成分配。
- 也可以用PowerShell快速配置:
# 获取Logic App系统身份的对象ID $logicAppObjId = (Get-AzLogicApp -ResourceGroupName "<资源组名称>" -Name "<Logic App名称>").Identity.PrincipalId # 获取Microsoft Graph的服务主体ID $graphServicePrincipal = Get-AzureADServicePrincipal -Filter "displayName eq 'Microsoft Graph'" # 获取Mail.Send应用权限的ID $mailSendPermissionId = $graphServicePrincipal.AppRoles | Where-Object { $_.Value -eq "Mail.Send" -and $_.AllowedMemberTypes -contains "Application" } | Select-Object -ExpandProperty Id # 分配权限 New-AzureADServiceAppRoleAssignment -ObjectId $logicAppObjId -PrincipalId $logicAppObjId -ResourceId $graphServicePrincipal.ObjectId -Id $mailSendPermissionId
2. 在Logic App中配置HTTP动作调用Graph API
在Logic App设计器中添加「HTTP」动作,按以下参数配置:
- 方法:POST
- URI:
https://graph.microsoft.com/v1.0/users/<共享邮箱完整邮箱地址>/sendMail - 身份验证:选择「托管标识」,「托管标识类型」选「系统分配的托管标识」,「资源」填写
https://graph.microsoft.com - 请求体(JSON示例):
注:{ "message": { "subject": "共享邮箱测试邮件", "body": { "contentType": "Text", "content": "这是通过Logic App系统身份发送的邮件" }, "toRecipients": [ { "emailAddress": { "address": "recipient@example.com" } } ] }, "saveToSentItems": false }saveToSentItems设为false可避免共享邮箱已发送文件夹的权限问题,根据实际需求调整。
3. 验证Exchange Online的Send As权限
确认你之前配置的共享邮箱Send As权限已生效,可通过PowerShell检查:
Get-RecipientPermission -Identity "<共享邮箱邮箱地址>" | Where-Object {$_.Trustee -eq "<Logic App系统身份的显示名称/UPN>"}
确保返回结果中AccessRights包含SendAs。
常见问题排查
- 若出现403错误:检查Graph的Mail.Send应用权限是否分配到位,Exchange的Send As权限是否正确,等待5-10分钟让权限生效后重试。
- 系统身份的UPN可在Logic App的「身份」页面查看,格式通常为
LogicApp名称@租户域名.onmicrosoft.com。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

