Skip to main content
 首页 » 编程设计

c#之EWS 读取邮件纯文本正文获取 ServiceObjectPropertyException

2024年01月21日35zdz8207

我在下面的代码中完成了以下操作,但仍然收到 ServiceObjectPropertyException。我显然正在按照建议加载属性 here too .请任何人帮助指出我做错了什么

this.ExchangeService = new ExchangeService(ExchangeVersion.Exchange2013); 
 
                this.ExchangeService.Credentials = new WebCredentials(mailBox, password); 
                this.ExchangeService.Url = new Uri("https://mail.xxxxxxxxxxx.com/EWS/Exchange.asmx");                 
 
                PropertySet itemProperty = new PropertySet(); 
                itemProperty.RequestedBodyType = BodyType.Text; 
 
 
                SearchFilter searchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false)); 
 
                ItemView view = new ItemView(999); 
                view.PropertySet = itemProperty;                 
 
                List<ExchangeMailResponse> emails = new List<ExchangeMailResponse>(); 
 
                FindItemsResults<Item> emailMessage = this.ExchangeService.FindItems(WellKnownFolderName.Inbox, searchFilter, view);                                
 
 
                foreach (Item mail in emailMessage) 
                { 
 
                    ExchangeMailResponse email = new ExchangeMailResponse(); 
 
 
                    mail.Load(itemProperty);                   
 
                   email.Message = mail.Body.Text;                    
 
 
                }    

请您参考如下方法:

使用您尝试使用的属性集,因为您没有使用 BasepropertySet 重载并且您没有添加任何属性,您唯一告诉交换返回 IdOnly。因此,在基本层面上,您至少需要添加 Body 属性,例如

itemProperty.Add(ItemSchema.Body); 

但是您将无法在 FindItems 操作中使用该属性集,因此我建议您更改代码,例如

        SearchFilter searchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false)); 
 
        PropertySet FindItemPropertySet = new PropertySet(BasePropertySet.IdOnly); 
 
        ItemView view = new ItemView(999); 
        view.PropertySet = FindItemPropertySet; 
        PropertySet GetItemsPropertySet = new PropertySet(BasePropertySet.FirstClassProperties); 
        GetItemsPropertySet.RequestedBodyType = BodyType.Text; 
 
 
        FindItemsResults<Item> emailMessages = null; 
        do 
        { 
            emailMessages = service.FindItems(WellKnownFolderName.Inbox, searchFilter, view); 
            if (emailMessages.Items.Count > 0) 
            { 
                service.LoadPropertiesForItems(emailMessages.Items, GetItemsPropertySet); 
                foreach (Item Item in emailMessages.Items) 
                { 
                    Console.WriteLine(Item.Body.Text); 
                } 
            } 
        } while (emailMessages.MoreAvailable); 

干杯 格伦