我有一段代码通过 ExchangeService 连接到邮箱,然后每隔 5 秒在收件箱中搜索一次新电子邮件(true)以进行自动处理。这工作得很好,只是每 66 分钟左右一次,在获取新电子邮件时,它会抛出异常:
The request failed. The remote server returned an error: (401) Unauthorized.
这是抛出异常的代码:
while (true)
{
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, new ItemView(10));
Thread.Sleep(FrequencyRefresh * 1000);
}
我正在使用
ExchangeVersion.Exchange2013_SP1
实例化 ExchangeService
似乎在通过 FindItems 进行 330 次查询后,服务器不允许这样做。 66 分钟的时间 + 5 秒的频率让我想到了每小时请求数量的限制,但我似乎在文档中找不到任何相关内容,我看到的唯一限制是关于页面搜索的,但是正如你所看到的,我正在使用 ItemView(10) 进行过滤,因此远远超出了 1000 的限制。
失败后2分钟后重新连接并继续工作。
如果有人能指出我正确的方向,我将不胜感激!
谢谢。
也许尝试将脚本更改为以下内容,可能值得阅读此内容 https://community.spiceworks.com/t/exchange-2016-autodiscover-failure-401-unauthorized-solved/702597/2
while (true)
{
try
{
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, new ItemView(10));
}
catch (ServiceRequestException ex) when (ex.Message.Contains("401"))
{
// Re-authenticate
service.Credentials = new WebCredentials("username", "password");
}
Thread.Sleep(FrequencyRefresh * 1000);
}