我目前正在制作一个小型应用程序来处理共享邮箱。
到目前为止,我可以收到电子邮件并与他们合作,一切都很好。
但是有一个大问题,在应用程序的开头,我列出了位于共享邮箱收件箱中的所有电子邮件。虽然邮箱中有超过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;
}
处理完电子邮件并将其移动到另一个文件夹后,它将不再找到它们。 EG:找到100封邮件,处理50封->将找到50封邮件以处理下一次运行。
因此,问题似乎不是页面大小问题,我可以找到500封邮件并处理500封邮件。此后,我的程序在收件箱中找到了0封邮件,尽管还剩下2300封邮件。
定义电子邮件处理时间的方式如下: 该程序是一个排序算法。因此,在对邮件进行分类时,会将它们移出收件箱,因此不再在收件箱中发现蜂鸣声。
关于为什么不报告某些邮件的任何想法吗?
编辑: 这就是我与交易所建立连接的方式:
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;
}
}
}