我使用GraphServiceClient从Outlook获取消息。
var messages = await _graphServiceClient.Me.MailFolders[folderId].Messages.Request()
.Header("Prefer", "outlook.body-content-type=\"text\"")
.Filter($"createdDateTime gt {greaterDate} and createdDateTime lt {lessDate}")
.Top(int.MaxValue).GetAsync();
请求最多可获得1000项。
我想得到其他的信息,并跟随文档。
我的代码:
var pageIterator = PageIterator<Message>
.CreatePageIterator(
_graphServiceClient,
messages,
// Callback executed for each item in
// the collection
(m) =>
{
return true;
},
// Used to configure subsequent page
// requests
(req) =>
{
// Re-add the header to subsequent requests
req.Header("Prefer", "outlook.body-content-type=\"text\"");
return req;
});
await pageIterator.IterateAsync();
但当我调用我的密码时什么都没发生。它看起来就像在pageIterator.IterateAsync();
之后,它是无穷大循环。
怎么啦?
发布于 2022-05-02 02:41:49
我发现了使用Top
查询的列表消息的限制。以下这句话来自列表消息api。
根据页大小和邮箱数据,从邮箱获取邮件可能会引发多个请求。默认页面大小为10条消息。使用$top自定义页面大小,范围为1和1000。
OData 顶参数的描述。
$top的最小值为1,最大值取决于相应的API。
=================================================
.Top(int.MaxValue)
,恐怕你最好把它的值设置为999,因为我不确定它的最大值是否有限制。我还测试了我的方面的Iterator,它真的花了很多时间,所以我添加了一个count
,就像文档显示的那样。
public async Task<string> mailsAsync() {
//var mail = await _graphServiceClient.Me.Messages.Request().GetAsync();
int count = 0;
var messages = await _graphServiceClient.Me.Messages
.Request()
.Header("Prefer", "outlook.body-content-type=\"text\"")
.Select(e => new {
e.Sender,
e.Subject,
e.Body
})
.Top(300)
.GetAsync();
var pageIterator = PageIterator<Message>
.CreatePageIterator(
_graphServiceClient,
messages,
(m) =>
{
Console.WriteLine(m.Subject);
count++;
return true;
},
// Used to configure subsequent page
// requests
(req) =>
{
// Re-add the header to subsequent requests
req.Header("Prefer", "outlook.body-content-type=\"text\"");
return req;
}
);
await pageIterator.IterateAsync();
count = count + 1;
return "success";
}
https://stackoverflow.com/questions/72058915
复制相似问题