我想编写代码以从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。
感谢您的任何建议。
答案 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);
干杯 格伦