You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Graph API读取自定义邮件文件夹报ID malformed错误咨询

问题结论
  • 必须对Get-MailboxFolderStatistics返回的FolderId做格式转换,否则一定会触发ErrorInvalidIdMalformed错误。
  • 存在可直接运行的PowerShell转换命令,不需要额外安装依赖。
错误原因

Get-MailboxFolderStatistics返回的FolderId是MAPI层使用的十六进制编码EntryID格式,而Microsoft Graph的/mailFolders接口要求传入的是Base64URL编码的REST格式ID,两种格式不兼容,直接传入就会报ID格式非法。

可用转换命令

将你查询到的原始FolderId替换到以下脚本的对应变量中,执行后输出的结果就是可以直接给Graph接口使用的合法FolderId:

# 替换为Get-MailboxFolderStatistics查询到的原始FolderId值
$rawMapiFolderId = "此处填入你拿到的原始FolderId"
$folderIdBytes = [byte[]]::new($rawMapiFolderId.Length / 2)
for ($i = 0; $i -lt $folderIdBytes.Length; $i++) {
    $folderIdBytes[$i] = [Convert]::ToByte($rawMapiFolderId.Substring($i * 2, 2), 16)
}
# 转换为Graph要求的Base64URL格式
$graphCompatibleFolderId = [Convert]::ToBase64String($folderIdBytes).TrimEnd('=').Replace('+', '-').Replace('/', '_')
# 输出可直接使用的ID
$graphCompatibleFolderId
替代方案(无需转换ID)

如果不想做格式转换,可以直接通过文件夹路径遍历的方式获取合法ID:

  1. 已知自定义文件夹的父文件夹(比如收件箱Inbox),先调用GET /users/mailbox@server.com/mailFolders/Inbox/childFolders?$select=id,displayName拿到收件箱下所有一级子文件夹的ID和名称
  2. 如果是更深层级的文件夹,继续在对应子文件夹下调用childFolders接口逐层查询即可,返回的id字段可以直接用来构造查询邮件的请求。

注意:不要尝试直接对原始MAPI格式的FolderId做URL编码后传入接口,URL编码无法解决底层格式不匹配的问题,依然会返回ID格式错误。

内容的提问来源于stack exchange,提问作者PhDJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 15:57:17