如何使用C#中的Exchange 2010检索邮件邮件正文

时间:2014-09-25 00:47:00

标签: c#-4.0 exchangewebservices

我想编写代码以从Exchange 2010获取Message正文。我在C#程序中使用EWS。

我试过了:

             FindItemsResults<Item> fiitems = service.FindItems(folder.Id, "from:*", iv);

             foreach (Item item in fiitems)
             {
                 if (item is EmailMessage)
                 {
                     Console.WriteLine("subject");
                     Console.WriteLine((item as EmailMessage).Subject);

                     Console.WriteLine("body");
                     Console.WriteLine((item as EmailMessage).Body);
                 }
             }

但我收到错误说&#39;您必须先加载或分配此属性,然后才能读取其值&#34;

然后我尝试了:

                Console.WriteLine("Subject:\t" + item.Subject);
                 Console.WriteLine("Title:\t" + item.TextBody);
                 Console.WriteLine("Received At:\t\t" + item.DateTimeReceived.ToString("dd MMMM yyyy"));
                 Console.WriteLine();

我收到错误说&#39;属性TextBody仅对Exchange Exchange2013或更高版本有效&#34; 我使用的是Exchange2010。

感谢您的任何建议。

1 个答案:

答案 0 :(得分:5)

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

您需要做的是使用GetItem操作(Managed API中的Load()方法)来实现此目的最有效的方法是使用LoadPropertiesForItems方法,它将执行批处理GetItem,因此您需要修改像

这样的代码
        PropertySet Props = new PropertySet(BasePropertySet.IdOnly);
        Props.Add(ItemSchema.Body);
        Props.Add(ItemSchema.Subject);
        FindItemsResults<Item> fiitems = null;
        do
        {
            fiitems = service.FindItems(Folder.Id, "from:*", iv);
            if (fiitems.Items.Count > 0)
            {
                service.LoadPropertiesForItems(fiitems.Items, Props);
                foreach (Item item in fiitems)
                {
                    if (item is EmailMessage)
                    {
                        Console.WriteLine("subject");
                        Console.WriteLine((item as EmailMessage).Subject);

                        Console.WriteLine("body");
                        Console.WriteLine((item as EmailMessage).Body);
                    }
                }
            }
            iv.Offset += fiitems.Items.Count;
        } while (fiitems.MoreAvailable);

干杯 格伦