如何通过Microsoft API(含Graph API)无基础认证为他人设置OOO消息
可以用Microsoft Graph API替代基础认证设置OOO消息
完全可以用Microsoft Graph API实现无基础认证的外出消息设置,这也是微软官方推荐的替代传统基础认证的方案,下面是具体实现思路和步骤:
一、权限配置
要替他人设置OOO,需要配置对应的Graph API权限:
- 如果是应用权限(适合后台服务、无人值守脚本):需要
MailboxSettings.ReadWrite.All权限,需由全局管理员在Azure AD中为应用授予该权限。 - 如果是委派权限(适合交互式操作):需要
MailboxSettings.ReadWrite权限,同样需要管理员同意该权限,这样你就能以自己的身份替其他用户操作。
二、PowerShell实现步骤
- 安装Microsoft Graph PowerShell模块
Install-Module Microsoft.Graph -Force -AllowClobber
- 连接Graph API(无基础认证)
- 应用权限方式(后台脚本):
Connect-MgGraph -ClientId "你的应用ID" -TenantId "你的租户ID" -ClientSecret "你的应用密钥"
- 委派权限方式(交互式登录,适合手动操作):
Connect-MgGraph -Scopes "MailboxSettings.ReadWrite.All"
登录时会弹出浏览器窗口,用有权限的账号登录即可,全程无基础认证。
- 设置目标用户的OOO消息
# 设置定时OOO Set-MgUserMailboxSetting -UserId "targetuser@contoso.com" -AutomaticRepliesSetting @{ Status = "Scheduled" ScheduledStartDateTime = @{ DateTime = "2024-05-20T09:00:00" TimeZone = "China Standard Time" } ScheduledEndDateTime = @{ DateTime = "2024-05-25T18:00:00" TimeZone = "China Standard Time" } ExternalReplyMessage = "您好,我目前正在外出,将在5月26日恢复工作并回复您的邮件。" InternalReplyMessage = "同事你好,我当前不在办公室,会尽快处理你的消息。" } # 如果是立即启用OOO(无时间限制),把Status改成"Enabled",去掉ScheduledStart/EndDateTime参数 Set-MgUserMailboxSetting -UserId "targetuser@contoso.com" -AutomaticRepliesSetting @{ Status = "Enabled" ExternalReplyMessage = "您好,我正在外出,稍后回复您。" InternalReplyMessage = "我现在不在,回来后马上处理。" }
三、其他说明
- 避免使用旧版Exchange Online PowerShell模块(依赖基础认证),微软已逐步淘汰基础认证,建议全面迁移到Graph API方案。
- 操作前确保执行脚本的账号或应用拥有足够的权限,否则会返回权限不足的错误。
内容的提问来源于stack exchange,提问作者user1
相关产品推荐
相关产品推荐

