搜索参数不适用于 Outlook restapi


The Search parameter does not work with Outlook restapi

我使用了"https://github.com/jasonjoh/php-tutorial"中描述的基本示例/教程,并尝试在getMessages()函数中添加"$search"参数

    $getMessagesParameters = array (
        // Message Search Conditions
        "'$search" => 'subject:"pizza"',
        // Only return Subject, ReceivedDateTime, and From fields
        "'$select" => "Subject,Body",
        // Return at most 10 results
        "'$top" => "10"
    );
    $getMessagesUrl = self::$outlookApiUrl."/Me/Messages?".http_build_query($getMessagesParameters);
    $response = $this->makeApiCall($access_token, $user_email, "GET", $getMessagesUrl);

请求返回错误 400

想知道正确的语法是什么

我参考了以下链接

https://msdn.microsoft.com/office/office365/api/complex-types-for-mail-contacts-calendar#UseODataqueryparametersSearchrequests

https://msdn.microsoft.com/en-us/library/cc513841%28v=office.12%29.aspx

https://support.office.com/en-us/article/Learn-to-narrow-your-search-criteria-for-better-searches-in-Outlook-d824d1e9-a255-4c8a-8553-276fb895a8da

如果有人有更好的主意搜索邮件,请建议...

您不能在搜索结果中使用 orderby。见 https://msdn.microsoft.com/en-us/office/office365/api/complex-types-for-mail-contacts-calendar#UseODataqueryparametersSearchrequests$search=主题:"披萨"应$search=主题:披萨。但这也行不通。我使用 $search=披萨并且有效(无需订购)

我已经找到了确切的问题...

问题不在于搜索参数规范/服务器 REST 端点...

但问题在于我们如何将查询参数发送到服务器......

我们不应该对数据进行 url 编码。

但是我们需要将结果 URL 中的空格替换为+

这就是我想出的解决方案...

    $search_AQS = '"Subject:(pizza+OR+hamburger+OR+tacos)+AND+subject:(NOT+beef+NOT+pork)"';
    $getMessagesParameters = array (
        "'$search" => $search_AQS,
        "'$select" => "Subject,Body",
        "'$top" => "10"
    );
    $tmp_uripiece = http_build_query($getMessagesParameters);
    $tmp_uripiece = urldecode($tmp_uripiece);
    $getMessagesUrl = self::$outlookApiUrl.'/Me/Messages?'.$tmp_uripiece;
    $response = $this->makeApiCall($access_token, $user_email, "GET", $getMessagesUrl);

是的!微软还支持其端点中的搜索功能...但他们应该用更多的例子来记录......

大家感谢您的支持...