2

我正在创建一个控制台应用程序来阅读特定用户电子邮件的电子邮件并处理满足特定条件的电子邮件。这是示例代码:

GraphServiceClient client = GetAuthenticatedClient();

string subject = "RE: ACTION NEEDED:";
string dt = "2018-10-5T00:00:00Z";
IUserMessagesCollectionPage msgs =
    client
    .Users["UserName@CompanyName.com"]
    .Messages.Request()
    //.Filter($"receivedDateTime gt {dt}")  // invalid filter
    .Filter($"startswith(subject, '{subject}') and receivedDateTime gt {dt}")
    .Select(m => new { m.Subject, m.ReceivedDateTime, m.From, m.Body })
    .Top(100)
    .GetAsync().Result;
int msgCnt = msgs.Count;

Console.WriteLine($"Message count: {msgCnt}");
Console.ReadLine();

2个问题:

  1. 我希望这个过滤器工作:

    .Filter($"startswith(subject, '{subject}') and receivedDateTime gt {dt}")
    

startswith作品本身但与日期过滤器错误。

  1. 我自己尝试了日期过滤器,但它不起作用。我得到一个无效的过滤器。我在日期周围添加了单引号,但没有运气。

    .Filter($"receivedDateTime gt {dt}")  // Get invalid filter
    

有任何想法吗?

4

2 回答 2

1

startwith 字符串运算符通常受支持。某些 API 支持 any lambda 运算符。有关一些使用示例,请参见下表。有关 $filter 语法的更多详细信息,请参阅 OData 协议。

https://developer.microsoft.com/en-us/graph/docs/concepts/query_parameters

并非所有 Graph API 都支持所有查询参数。

根据 Marc 的帖子也更新了我的答案:如果您想使用 DateTime 作为查询参数来过滤邮件,您应该使用以下关于消息的 api 之一 :

https://graph.microsoft.com/v1.0/me/mailFolders/inbox/messages?$filter=ReceivedDateTime ge 2018-10-01 and startswith(subject,'{subject}')

或者

https://graph.microsoft.com/v1.0/me/messages?$filter=ReceivedDateTime ge 2018-10-1 and startswith(subject,'{subject}')

如果要添加日期(2018-10-01)和时间(T04:16:35Z),则应使用以下格式

2018-10-05T04:16:35Z(yyyy-mm-ddThh:mm:ssZ)

如果您只使用没有时间的日期,则可以使用以下格式

2018-10-5(yyyy-mm-d) or 2018-10-05(yyyy-mm-dd)
于 2018-10-08T00:18:32.577 回答
0

您使用的日期格式错误。该值2018-10-5T00:00:00Z缺少0. 更具体地说,这一天应该是05,而不是5

 string dt = "2018-10-05T00:00:00Z";
于 2018-10-08T13:47:12.187 回答