gpt4 book ai didi

c# - EWS foreach 所有未读邮件不起作用

转载 作者:太空狗 更新时间:2023-10-29 21:08:38 24 4
gpt4 key购买 nike

我需要遍历收件箱中的所有未读邮件并为每封电子邮件下载第一个附件,我的代码有效但仅适用于第一封电子邮件,为什么?

/* load all unread emails */
SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, sf, new ItemView(1));

/* loop through emails */
foreach (EmailMessage item in findResults)
{
item.Load();

/* download attachment if any */
if (item.HasAttachments && item.Attachments[0] is FileAttachment)
{
Console.WriteLine(item.Attachments[0].Name);
FileAttachment fileAttachment = item.Attachments[0] as FileAttachment;

/* download attachment to folder */
fileAttachment.Load(downloadDir + fileAttachment.Name);
}

/* mark email as read */
item.IsRead = true;
item.Update(ConflictResolutionMode.AlwaysOverwrite);
}

Console.WriteLine("Done");

在我的收件箱中,它设置了要阅读的第一封电子邮件,但随后脚本停止并写下“完成”。到控制台窗口。怎么了?

最佳答案

问题是您只从 Exchange 请求一个项目。

FindItemsResults<Item> findResults = service.FindItems(
WellKnownFolderName.Inbox,
sf,
new ItemView(1));

ItemView class构造函数将页面大小作为其参数,其定义为:

The maximum number of items the search operation returns.

所以您请求的是单个项目,这解释了为什么您的 foreach 在该项目之后完成。

要对此进行测试,您只需将 pageSize 增加到更合理的值,例如 100 或 1000。

但要修复它,您应该遵循惯用的双循环:

SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
FindItemsResults<Item> findResults;
ItemView view = new ItemView(100);
do {
findResults = service.FindItems(WellKnownFolderName.Inbox, sf, view);
foreach (var item in findResults.Items) {
// TODO: process the unread item as you already did
}
view.Offset = findResults.NextPageOffset;
}
while (findResults.MoreAvailable);

在这里,只要它告诉我们有更多可用的项目,我们就会继续从 Exchange 中检索更多的项目(每批 100 个)。

关于c# - EWS foreach 所有未读邮件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26544626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com