.net - EWS 托管 API 获取所有电子邮件项目错误

标签 .net exchangewebservices

我的目标是获取给定文件夹中的所有电子邮件,但我不断收到属性错误:

The property Body can't be used in FindItem requests

你们能指出我做错了什么吗?下面是我使用.NET Framework 4.0的测试代码

private static void GetEmailMessageCollection(ExchangeService service)
  {
     ItemView view = new ItemView(100);

     view.PropertySet = new PropertySet(PropertySet.FirstClassProperties);
     view.PropertySet.Add(ItemSchema.HasAttachments);
     view.PropertySet.Add(ItemSchema.Body);
     view.PropertySet.Add(ItemSchema.DisplayTo);
     view.PropertySet.Add(ItemSchema.IsDraft);
     view.PropertySet.Add(ItemSchema.DateTimeCreated);
     view.PropertySet.Add(ItemSchema.DateTimeReceived);

     FindItemsResults<Item> findResults;
     List<EmailMessage> emails = new List<EmailMessage>();

     string archiveFolderID = " AQEuAAADGF6AegrId0+ekrWv0TJZtgEAZ2jpm1niGUS/jwC23X6j/AAAAgP/AAAA";

     SearchFilter unreadSearchFilter = new SearchFilter.SearchFilterCollection();
     Folder boundFolder = Folder.Bind(service, archiveFolderID );
     findResults = boundFolder.FindItems(unreadSearchFilter, view);


     foreach (var item in findResults.Items)
     {
        emails.Add((EmailMessage)item);
     }

  }

谢谢。

最佳答案

当您在 EWS 中使用 FindItems 操作时,它只会返回项目可用属性的子集。它不会返回的属性之一是 Body 属性(或任何大于 512 字节的流属性),请参阅 http://msdn.microsoft.com/EN-US/library/office/dn600367(v=exchg.150).aspx

您需要做的是使用 GetItem 操作来获取此内容,最有效的方法是使用 LoadPropertiesForItems 方法,该方法将执行批量 GetItem,因此您需要修改代码,例如

        ItemView view = new ItemView(100);
        view.PropertySet = new PropertySet(PropertySet.IdOnly);
        PropertySet PropSet = new PropertySet();
        PropSet.Add(ItemSchema.HasAttachments);
        PropSet.Add(ItemSchema.Body);
        PropSet.Add(ItemSchema.DisplayTo);
        PropSet.Add(ItemSchema.IsDraft);
        PropSet.Add(ItemSchema.DateTimeCreated);
        PropSet.Add(ItemSchema.DateTimeReceived);

        FindItemsResults<Item> findResults;
        List<EmailMessage> emails = new List<EmailMessage>();
        do
        {
            findResults = service.FindItems(WellKnownFolderName.Inbox, view);
            if (findResults.Items.Count > 0)
            {
                service.LoadPropertiesForItems(findResults.Items, PropSet);
                foreach (var item in findResults.Items)
                {
                    Console.WriteLine(item.Body.Text);
                }
            }
            view.Offset += findResults.Items.Count;
        } while (findResults.MoreAvailable);

干杯 格伦

关于.net - EWS 托管 API 获取所有电子邮件项目错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25816871/

相关文章:

.net - 在 .NET 中处理单例对象

microsoft-graph-api - 存档邮箱的Graph API失败

c# - 从 EWS 导出可在 MS Outlook 中打开的电子邮件消息

c# - 在一个应用程序中使用不同版本的 dll 文件

c# - C# 中的谓词问题

c# - ObservableCollection.Contains() 无法正常工作

c# - 包含反斜杠的路径字符串无法识别的转义序列

c# - 如何获取收件箱文件夹实例?

java - EWS XML 查询无答案

azure - 创建新的 AzureAD 用户并添加到通讯组列表