使用EWS C#检索未读电子邮件

时间:2019-09-13 03:33:06

标签: c# web-services exchangewebservices

下面是我的工作代码段,该代码段从“收件箱”下的自定义文件夹名称中检索未读的电子邮件。

foreach (Microsoft.Exchange.WebServices.Data.Folder folder in findFolderResults.Folders)
{
    LogFile.AppendLog(folder.DisplayName + " folder found in Inbox.");
    if (folder.DisplayName == folderName)
    {
        LogFile.AppendLog(folder.DisplayName + " matches " + folderName);
        ItemView view = new ItemView(emailBatch);

        do
        {
            LogFile.AppendLog("Checking for unread emails in folder " + folder.DisplayName);
            emailItemList = service.FindItems(folder.Id, sf, view);
            foreach (var emailItem in emailItemList.Items)
            {
                LogFile.AppendLog("Getting unread emails in folder " + folder.DisplayName);
                EmailMessage email = EmailMessage.Bind(service, emailItem.Id);
                retrievedEmailList.Add((EmailMessage)email);
            }

            if (!emailItemList.NextPageOffset.HasValue)
                break;
        }
        while (emailItemList.MoreAvailable);
    }
}

有一个变量emailBatch,当前已配置为10

我确实知道这意味着它只会一次检查并检索10未读电子邮件。 但是,一旦10电子邮件已添加到列表中,它将继续检查未读电子邮件吗?

如果发生的话,我需要将所有未读的电子邮件添加到retrievedEmailList中,而不是仅添加10封电子邮件。

谢谢。

1 个答案:

答案 0 :(得分:0)

您需要实现paged searching。您似乎已经部分尝试过此方法,但是您的代码缺少一些东西。我已经更新了您的代码,并在注释中解释了我添加的新代码。

// Set the offset for the paged search.
int offset = 0;
// Set the flag that indicates whether to continue iterating through additional pages.
bool MoreItems = true;

LogFile.AppendLog(folder.DisplayName + " folder found in Inbox.");
if (folder.DisplayName == folderName)
{
    // Continue paging while there are more items to page.
    while (MoreItems)
    {
        LogFile.AppendLog(folder.DisplayName + " matches " + folderName);
        // Set the ItemView with the page size and offset.
        ItemView view = new ItemView(emailBatch, offset, OffsetBasePoint.Beginning);

        LogFile.AppendLog("Checking for unread emails in folder " + folder.DisplayName);
        emailItemList = service.FindItems(folder.Id, sf, view);
        foreach (var emailItem in emailItemList.Items)
        {
            LogFile.AppendLog("Getting unread emails in folder " + folder.DisplayName);
            EmailMessage email = EmailMessage.Bind(service, emailItem.Id);
            retrievedEmailList.Add((EmailMessage)email);
        }

        // Set the flag to discontinue paging.
        if (!emailItemList.MoreAvailable)
            MoreItems = false;
        // Update the offset if there are more items to page.
        if (MoreItems)
            offset += pageSize;
    }
}
相关问题