微软 Microsoft 365 Exchange Online Message Trace 踩坑指北
PoSH Cmdlet Usage
Powershell
- 默认 Powershell 的输入输出时间均为 UTC 时间,显示出来的没有格式化,从服务器下载下来的时间戳对象不包含时区信息。
- SPF 失效的情况可以使用发件人 IP 和 发件人邮件地址进行过滤,并不受影响。
- 单页最大长度为 1000 条,导出 CSV 时需要注意编码问题,默认 UTF-8 在 Mac OS 下工作正常。 导出 CSV 时可以添加
-Encoding oem
参数规避编码问题。
Golang
认证流程为 OAuth2 Client-side App Auth with Authorization Workflow. 服务器使用时需要自行在对应企业中创建 OAuth2 App 并取得对应管理账号的权限。截止写作此文(2023–02–18)时,此 API 没有迁移到 Microsoft Graph API,因此需要独立适配。Powershell 中的 API 为当前正在使用版本的 API,隶属于原 Office 365 Reporting Web Service (后升级为 Microsoft 365 Graph Report API,但部分 API 没有迁移和废除,仍在使用,本文用到的 MessageTrace 就是没有迁移的一个)。
MS Azure API 使用 OData 协议,通过 $format
URL 参数和 Accept
Header 确认输出格式,使用 JSON 类型可以避免 XML 的不必要开销。认证过程中需要用到的 MSAL 认证库,使用 OAuth2 方式认证时对应 scope 需在 MS Graph API 分类下添加授权,且 openid profile offline_access
为 hardcode 的 scope ,不要重复指定。
创建的 OAuth2 应用在没有微软认证的情况下只能在本企业内使用。
参考文献
- MS 365 Dev 测试订阅 (E5):https://developer.microsoft.com/en-us/microsoft-365/dev-program
- MS IDP 认证流程:https://learn.microsoft.com/en-us/previous-versions/azure/dn645542(v=azure.100)
- https://techcommunity.microsoft.com/t5/microsoft-365-blog/announcing-the-general-availability-of-microsoft-graph-reporting/ba-p/137838
- https://www.ibm.com/docs/en/dsm?topic=to3mtrap-office-365-message-trace-rest-api-protocol-faq
- https://learn.microsoft.com/en-us/previous-versions/office/developer/o365-enterprise-developers/jj984335(v=office.15)#fields
- https://learn.microsoft.com/en-us/graph/reportroot-concept-overview