Graph API技术问题:如何将邮件移动至收件箱子文件夹
解决Graph API移动邮件到收件箱子文件夹失败的问题
问题核心在于Graph API的destinationId参数不支持层级路径格式(如Inbox/processed),自定义子文件夹必须使用其唯一ID作为参数值;而Archive这类系统默认顶级文件夹能直接用显示名称,是因为Graph API对这些内置文件夹提供了别名支持。
解决步骤:
获取processed子文件夹的ID
调用Graph API的GET /me/mailFolders/Inbox/childFolders接口,获取收件箱下所有子文件夹的信息,从中找到displayName为processed的文件夹对应的id字段。示例PHP CURL代码:
$ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_URL => 'https://graph.microsoft.com/v1.0/me/mailFolders/Inbox/childFolders', CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => array( 'Authorization: Bearer '.$access_token.'' ), )); $response = curl_exec($ch); curl_close($ch); $folders = json_decode($response, true); // 遍历找到processed文件夹的ID $processedFolderId = ''; foreach($folders['value'] as $folder){ if($folder['displayName'] === 'processed'){ $processedFolderId = $folder['id']; break; } }修改移动邮件的代码
将destinationId的值替换为上面获取到的processedFolderId:$dataar = array("destinationId" => $processedFolderId); $postdata = json_encode($dataar); $chmove = curl_init(); curl_setopt_array($chmove, array( CURLOPT_URL => $urlsendgetattidmove, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => $postdata, CURLOPT_HTTPHEADER => array( 'Content-Type: application/json', 'Authorization: Bearer '.$access_token.'' ), )); $responsemove = curl_exec($chmove); curl_close($chmove);
补充说明:
- 系统默认文件夹(如Archive、Drafts、SentItems等)支持用显示名称作为
destinationId,是因为Graph API为这些文件夹预设了固定的别名映射; - 所有自定义创建的子文件夹,必须通过ID来指定,无法通过层级路径或显示名称直接引用。
内容的提问来源于stack exchange,提问作者kanishka kumarasiri
相关产品推荐
相关产品推荐

