c#-4.0 - 如何在 C# 中使用 Exchange 2010 检索邮件正文

标签 c#-4.0 exchangewebservices

我想编写代码以从 Exchange 2010 获取消息正文。我在 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);
                 }
             }

但是我收到错误消息,说“您必须先加载或分配此属性,然后才能读取其值”

然后我尝试:
                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();

我收到错误消息“属性 TextBody 仅对 Exchange Exchange2013 或更高版本有效”
我正在使用 Exchange2010。

谢谢你的任何建议。

最佳答案

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

您需要做的是使用 GetItem 操作(即托管 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);

干杯
格伦

关于c#-4.0 - 如何在 C# 中使用 Exchange 2010 检索邮件正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26028760/

相关文章:

java - 消费者没有将连接返回到我的数据库连接池

powershell - 使用EWS检查未读的交换邮件数

exchangewebservices - 使用 Exchange Web 服务的 OWA 签名更新

.net - 如何在 WCF for Exchange Web Services 中绕过 TLS/SSL 认证验证

java - 找不到自动发现服务

MysqlCommand ExecuteNonquery返回值始终为0

c# - 显示过去和 future 的日期 asp.net c#

c# - IDE中的Visual C#Express Edition命令行参数

asp.net - 类库中的本地化/资源文件

java - 通过 Exchange WebServices Java API 1.1 发送电子邮件