我正在创建一个控制台应用程序,以读取特定用户电子邮件的电子邮件并处理满足特定条件的电子邮件。这是示例代码:
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个问题:
我希望此过滤器可以工作:
.Filter($"startswith(subject, '{subject}') and receivedDateTime gt {dt}")
startswith
本身可以工作,但是使用日期过滤器会出错。
我自己尝试过日期过滤器,但它不起作用。我收到无效的过滤器。我在日期前后添加了单引号,但是没有运气。
.Filter($"receivedDateTime gt {dt}") // Get invalid filter
有什么想法吗?
答案 0 :(得分:0)
通常支持startswith字符串运算符。任何lambda 某些API支持运算符。有关一些用法示例,请参见 下表。有关$ 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}')
如果要添加带时间(T04:16:35Z)的日期(2018-10-01),则应使用以下格式:
2018-10-05T04:16:35Z(yyyy-mm-ddThh:mm:ssZ)
如果您只使用日期而没有时间,则可以使用以下格式:
2018-10-5(yyyy-mm-d) or 2018-10-05(yyyy-mm-dd)
答案 1 :(得分:0)
您使用的日期格式错误。值2018-10-5T00:00:00Z
缺少0
。更具体地说,日期应该是05
,而不是5
:
string dt = "2018-10-05T00:00:00Z";