如何通过Outlook API获取邮件ID及自定义标头?
获取Outlook邮件的Message ID和自定义标头
我来帮你搞定这个需求!要拿到邮件的Message ID和自定义标头,你需要调整API请求的$select参数,同时用上Outlook API的internetMessageHeaders属性——这个属性专门用来返回邮件的原始标头(包括你自定义的那些),而Message ID对应的是internetMessageId字段,这俩都得在$select里显式指定才会返回。
调整后的请求代码
先把你原来的$search数组补全,确保包含需要的字段:
$headers = array( "User-Agent: php-tutorial/1.0", "Authorization: Bearer ".token()->access_token, "Accept: application/json", "client-request-id: ".makeGuid(), "return-client-request-id: true", "X-AnchorMailbox: ". get_user_email() ); $top = 2; $skip = isset($_GET["skip"]) ? intval($_GET["skip"]) : 0; $search = array ( // 明确指定需要返回的字段,包括Message ID和标头集合 "\$select" => "internetMessageId,Subject,From,internetMessageHeaders", "\$top" => $top, "\$skip" => $skip ); // 把参数拼接到API请求URL里(假设你调用的是/messages端点) $apiUrl = "https://graph.microsoft.com/v1.0/me/messages?" . http_build_query($search); // 发起请求(这里用curl示例,你可以用自己的HTTP请求方式) $ch = curl_init($apiUrl); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); $messages = json_decode($response, true);
解析响应获取目标内容
拿到响应后,你可以这样提取Message ID和自定义标头:
foreach ($messages['value'] as $message) { // 获取Message ID $messageId = $message['internetMessageId']; echo "Message ID: " . $messageId . "<br>"; // 获取所有标头,筛选自定义标头(比如X-My-Custom-Header) $customHeaders = array_filter($message['internetMessageHeaders'], function($header) { return $header['name'] === 'X-My-Custom-Header'; // 替换成你的自定义标头名称 }); if (!empty($customHeaders)) { $customHeaderValue = reset($customHeaders)['value']; echo "自定义标头值: " . $customHeaderValue . "<br>"; } echo "<hr>"; }
关键说明
internetMessageId就是邮件的Message ID,是邮件的唯一标识符,和SMTP标头里的Message-ID对应。internetMessageHeaders返回的是所有邮件标头的数组,每个元素包含name(标头名称)和value(标头值),你可以根据需要筛选出特定的自定义标头。- 如果你不需要所有标头,也没办法在API请求里直接过滤,只能获取全部后在本地处理筛选。
内容的提问来源于stack exchange,提问作者laurel
相关产品推荐
相关产品推荐

