C#EWS Exchange Service找不到所有项目

时间:2019-10-25 15:41:47

标签: c# email outlook exchangewebservices

我目前正在制作一个小型应用程序来处理共享邮箱。

到目前为止,我可以收到电子邮件并与他们合作,一切都很好。

但是有一个大问题,在应用程序的开头,我列出了位于共享邮箱收件箱中的所有电子邮件。虽然邮箱中有超过1000封电子邮件,但我的应用程序只找到其中​​的一部分。我尚未应用任何过滤器。

这是我的代码:

public static List<Item> OpenInbox()
{
    int offset = 0;
    int pagesize = 50;
    FolderId SharedMailbox = new FolderId(WellKnownFolderName.Inbox, "informatik@XXX");
    ItemView itemView = new ItemView(pagesize, offset, OffsetBasePoint.Beginning);
    FindItemsResults<Item> findResults;
    List<Item> emails = new List<Item>();
    bool more = true;
    while (more)
    {
        findResults = service.FindItems(SharedMailbox, itemView);
        emails.AddRange(findResults);

        more = findResults.MoreAvailable;
        if (more)
        {
            itemView.Offset += pagesize;
        }
    }

    return emails;
}

以前我有很多非常简单的代码(最多1000个项目),但结果是相同的:

public static List<Item> OpenInbox()
{
    FolderId SharedMailbox = new FolderId(WellKnownFolderName.Inbox, "informatik@XXX");
    ItemView itemView = new ItemView(1000);
    FindItemsResults<Item> findResults = service.FindItems(SharedMailbox, itemView);

    return findResults;
}

程序可以找到(一些)邮件:
enter image description here

处理完电子邮件并将其移动到另一个文件夹后,它将不再找到它们。 EG:找到100封邮件,处理50封->将找到50封邮件以处理下一次运行。

因此,问题似乎不是页面大小问题,我可以找到500封邮件并处理500封邮件。此后,我的程序在收件箱中找到了0封邮件,尽管还剩下2300封邮件。

定义电子邮件处理时间的方式如下: 该程序是一个排序算法。因此,在对邮件进行分类时,会将它们移出收件箱,因此不再在收件箱中发现蜂鸣声。

但是,收件箱中不包含242个邮件,但> 1000个
enter image description here

关于为什么不报告某些邮件的任何想法吗?


编辑: 这就是我与交易所建立连接的方式:

public static void StartExchangeService()
{
    int counter = 0;
Start:;
    // log in to exchange
    string password = "XXX";
    string mail = "julian.bechtold@XXX.ch";
    service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
    service.Credentials = new WebCredentials(mail, password);
    try
    {
        service.AutodiscoverUrl(mail, RedirectionUrlValidationCallback);
    }
    catch (Microsoft.Exchange.WebServices.Data.AutodiscoverLocalException)
    {
        if (counter > 3) throw;
        else
        {
            Thread.Sleep(10000);
            counter++;
            goto Start;
        }
    }

}

0 个答案:

没有答案