通过Microsoft 365 API应用权限创建会议成功但与会者未收到通知邮件的问题
通过Microsoft 365 API应用权限创建会议成功但与会者未收到通知邮件的问题
我帮你拆解下当前遇到的问题,结合你的代码和报错信息,咱们一步步解决:
问题根源分析
你现在的情况是会议创建成功,但与会者收不到邀请,还触发了550 5.7.708的投递错误,主要有两个核心原因:
- API请求缺少发送邀请的关键参数:Graph API在应用权限模式下创建会议时,默认不会自动发送邀请邮件——你得明确告诉接口要执行发送操作;
- 邮件投递上下文被安全策略拦截:用应用权限创建会议时,邀请邮件是从Azure AD的服务IP发出的,容易被收件方租户的邮件安全规则拦截,同时你的权限配置也可能缺了发送邮件的必要权限。
具体解决步骤
1. 给API请求添加发送邀请的参数
这是最关键的一步,你的代码里调用/users/{USER_ID}/events接口时,没有指定sendInvitations参数,默认值是SendToNone(只存会议不发邀请)。把请求URL修改为:
# 修改后的请求URL,显式指定发送邀请策略 response = requests.post( f"{GRAPH_API_URL}/users/{USER_ID}/events?sendInvitations=SendToAllAndSaveCopy", headers=headers, json=meeting_data )
参数SendToAllAndSaveCopy的作用是:给所有与会者发送邀请邮件,同时将会议保存到目标用户的日历中,完全匹配你的需求。
2. 补充应用的邮件发送权限
你已经配置了Calendars.ReadWrite和OnlineMeetings.ReadWrite,但还需要添加**Mail.Send的应用权限**——发送会议邀请本质是邮件发送操作,必须有这个权限才能触发邮件投递流程。添加后记得让租户管理员完成权限同意,再重新获取token测试。
3. 解决邮件被拦截的问题
如果修改参数和权限后仍出现550错误,说明收件方租户的安全策略拦截了应用发出的邮件,可以试试这两个方案:
- 联系收件方租户的管理员,确认是否将Azure AD服务IP段加入信任列表,或者调整邮件过滤规则;
- 如果业务场景允许,切换为委托权限模式(比如用OAuth授权码流程,以用户身份获取token),这样会议邀请会以用户本人名义发送,邮件投递的信任度更高,基本不会被拦截。
验证修改效果
重新运行修改后的代码,会议创建成功后,与会者应该能正常收到邀请邮件;如果仍有投递错误,优先检查收件方的邮件安全配置或切换权限模式。
备注:内容来源于stack exchange,提问作者Thamara Kannan
相关产品推荐
相关产品推荐

