【问题标题】:Delete emails from EWS ExchangeVersion.Exchange2013 vs 2010从 EWS ExchangeVersion.Exchange2013 与 2010 删除电子邮件
【发布时间】:2016-01-29 00:06:51
【问题描述】:

我的测试代码使用 ExchangeVersion.Exchange2010 删除电子邮件,如下所示。

        var finalsearchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And)
                {
                    new SearchFilter.IsGreaterThan(EmailMessageSchema.DateTimeReceived, DateTime.Now.AddDays(-15)),
                };

        view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending);

        view.Traversal = ItemTraversal.Shallow;
        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
        service.Credentials = new WebCredentials("user@example.com", "password", "domain");
        service.AutodiscoverUrl("user@example.com");
        FindItemsResults<Item> items = service.FindItems(new FolderId(WellKnownFolderName.Inbox, new Mailbox("mailboxName@example.com")), finalsearchFilter, view);

        if (items.Count() != 0)
        {
            IEnumerable<ItemId> itemIds = from p in items.Items select p.Id;
            service.DeleteItems(itemIds, DeleteMode.SoftDelete, null, null);
        }

但如果我将 2010 更改为 2013,我会立即收到一条错误消息。

Microsoft.Exchange.WebServices.Data.ServiceVersionException : Exchange Server doesn't support the requested version.

有人可以指出我所缺少的正确方向吗?当我查看 msdn 教程时,他们在调用 exchangeservice 对象时仍然使用 2010,有时甚至使用 2007 参考。我还看到其他帖子说我需要专门将ExchangeVersion.Exchange2010 放入其中,但我已经有了。如果有帮助,我还下载了最新的 nuget 包交换网络服务,这就是我的代码可以识别出有 Exchange2013

【问题讨论】:

  • 您确定您实际上是在与 2013 年的服务器通话吗?
  • 这是我第一次研究它时的想法。如果我取出大部分代码,只留下“exchangeService”对象、凭据和 autodiscoverUrl,一切都很好。没有错误。但只需添加“findItems”部分,我就会得到那个错误。是不是因为在 FindItems 部分之前我实际上并没有与 2013 年的服务器通话?
  • 我不使用 C#,但我刚刚测试了使用 &lt;typ:RequestServerVersion Version="Exchange2013"/&gt; 向 Exchange Server 2010 发送 SOAP 请求,这给了我错误 指定的服务器版本无效。 好像不能用太高的版本号调用 ES。我为版本 Exchange2007SP1 开发我的代码作为最低公分母。
  • 我可以理解 MS 示例在其示例文档中使用“旧”版本的原因有两个:1)旧示例从未更新 2)它显示了首次实现某个功能的版本。
  • 所以我查看了我正在调用的服务器,你是对的。我了解到 FindItems 方法返回来自 EWS 的调用。我检查了它是什么版本,它是 Exchange 2010_SP2。通过删除 finditems 部分,我没有调用 EWS,这就是我没有收到错误的原因。因为我打电话要2013,版本号太高了。我现在正在使用 2010。谢谢提醒。

标签: c# exchange-server exchangewebservices exchange-server-2010 exchange-server-2013


【解决方案1】:

这对我有用:

item.Delete(DeleteMode.MoveToDeletedItems);

项目在哪里是电子邮件

【讨论】:

  • 欢迎来到 Stack Overflow。虽然此代码可能会回答问题,但提供有关此代码回答问题的原因和/或方式的附加上下文会提高其长期价值。How to Answer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-24
  • 2019-09-13
  • 1970-01-01
相关资源
最近更新 更多