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

n17*_*911 4 exchangewebservices c#-4.0

我想编写代码以从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);
                 }
             }
Run Code Online (Sandbox Code Playgroud)

但我得到错误说'你必须加载或分配这个属性才能读出它的值"

然后我尝试了:

                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();
Run Code Online (Sandbox Code Playgroud)

我收到错误说"属性TextBody仅对Exchange Exchange2013或更高版本有效"我正在使用Exchange2010.

谢谢你的任何建议.

Gle*_*les 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);
Run Code Online (Sandbox Code Playgroud)

干杯格伦