c#-Exchange Web服务API和401未经授权的异常

c#-Exchange Web服务API和401未经授权的异常,c#,exchangewebservices,C#,Exchangewebservices,以下EWS电话偶尔会产生401个错误(1000封电子邮件中有1封) emailMessage.Load(propertySet) emailMessage.Move(WellKnownFolderName.DeletedItems) 你知道问题出在哪里吗?电子邮件驻留在收件箱中&需要进行多次规则扫描(由于驻留在收件箱中),但规则不会将其从收件箱中删除。以后重新处理同一封电子邮件将成功。凭证或propertySet没有问题,它只有静态引用。这就好像emailMessage虽然是从服务中检索到的。F

以下EWS电话偶尔会产生401个错误(1000封电子邮件中有1封)

emailMessage.Load(propertySet)

emailMessage.Move(WellKnownFolderName.DeletedItems)

你知道问题出在哪里吗?电子邮件驻留在收件箱中&需要进行多次规则扫描(由于驻留在收件箱中),但规则不会将其从收件箱中删除。以后重新处理同一封电子邮件将成功。凭证或propertySet没有问题,它只有静态引用。这就好像emailMessage虽然是从服务中检索到的。FindItems()具有临时权限。我在EWS日志中没有看到任何相应的错误

为了澄清这一点,适用于收件箱的规则是移动其他电子邮件。严格地说,我不知道ES(+消息实验室)在将电子邮件放入收件箱之前是否应用了这些规则(如跨度检查等)。如果在插入后应用,我可以理解可能有两个进程同时对收件箱工作。如果是这样的话,我不知道这意味着什么。这都是猜测——我不知道这是否与我的问题有关。然而,例外情况表明401源于EWS响应,尽管我在EWS日志中没有找到相同的响应

Error: Microsoft.Exchange.WebServices.Data.ServiceRequestException: The request failed. The remote server returned an error: (401) Unauthorized. ---> System.Net.WebException: The remote server returned an error: (401) Unauthorized.
   at System.Net.HttpWebRequest.GetResponse()
   at Microsoft.Exchange.WebServices.Data.EwsHttpWebRequest.Microsoft.Exchange.WebServices.Data.IEwsHttpWebRequest.GetResponse()
   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest request)
   --- End of inner exception stack trace ---
   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest request)
   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ValidateAndEmitRequest(IEwsHttpWebRequest& request)
   at Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.Execute()
   at Microsoft.Exchange.WebServices.Data.ExchangeService.InternalLoadPropertiesForItems(IEnumerable`1 items, PropertySet propertySet, ServiceErrorHandling errorHandling)
   at Microsoft.Exchange.WebServices.Data.Item.InternalLoad(PropertySet propertySet)

Microsoft.Exchange.WebServices.Data.ServiceRequestException: The request failed. The remote server returned an error: (401) Unauthorized. ---> System.Net.WebException: The remote server returned an error: (401) Unauthorized.
   at System.Net.HttpWebRequest.GetResponse()
   at Microsoft.Exchange.WebServices.Data.EwsHttpWebRequest.Microsoft.Exchange.WebServices.Data.IEwsHttpWebRequest.GetResponse()
   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest request)
   --- End of inner exception stack trace ---
   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest request)
   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ValidateAndEmitRequest(IEwsHttpWebRequest& request)
   at Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.Execute()
   at Microsoft.Exchange.WebServices.Data.ExchangeService.InternalMoveItems(IEnumerable`1 itemIds, FolderId destinationFolderId, Nullable`1 returnNewItemIds, ServiceErrorHandling errorHandling)
   at Microsoft.Exchange.WebServices.Data.ExchangeService.MoveItem(ItemId itemId, FolderId destinationFolderId)
   at Microsoft.Exchange.WebServices.Data.Item.Move(FolderId destinationFolderId)
   at Microsoft.Exchange.WebServices.Data.Item.Move(WellKnownFolderName destinationFolderName)

此问题可能导致Microsoft office 365提供的两步验证。最好创建应用程序密码并传递该密码,而不是outlook密码


exchangeService.Credentials=新的WebCredentials(“电子邮件”、“应用程序密码”)

此问题可能导致Microsoft office 365提供的两步验证。最好创建应用程序密码并传递该密码,而不是outlook密码


exchangeService.Credentials=新的WebCredentials(“电子邮件”、“应用程序密码”)

如果它看起来是零星的,您可以尝试添加临时错误处理。或给我们一个完整的例外。我可能会退回到重试策略,我没有意识到这是一个如此正式的模式-谢谢。不过,修复核心问题会很好。如果它看起来是零星的,您可以尝试添加临时错误处理。或给我们一个完整的例外。我可能会退回到重试策略,我没有意识到这是一个如此正式的模式-谢谢。不过,如果能解决核心问题就好了。