我正在使用Exchange Web服务托管API。我正在为收件箱中的邮件添加一个扩展属性,因为它们会根据某些条件进行处理。因此,并非所有邮件都会附加这些扩展属性。
接下来我正在重新收集收件箱中的所有邮件,如果他们附加了这个属性,我会再次处理它们。
下面是一个简单的方法getAllMailsInInbox()
,我写的是为了重新收集收件箱中的邮件:
class MyClass
{
private static Guid isProcessedPropertySetId;
private static ExtendedPropertyDefinition isProcessedPropertyDefinition = null;
static MyClass()
{
isProcessedPropertySetId = new Guid("{20F3C09F-7CAD-44c6-BDBF-8FCB324244}");
isProcessedPropertyDefinition = new ExtendedPropertyDefinition(isProcessedPropertySetId, "IsItemProcessed", MapiPropertyType.String);
}
public List<EmailMessage> getAllMailsInInbox()
{
List<EmailMessage> emails = new List<EmailMessage>();
ItemView itemView = new ItemView(100, 0);
FindItemsResults<Item> itemResults = null;
PropertySet psPropSet = new PropertySet(BasePropertySet.IdOnly);
itemView.PropertySet = psPropSet;
PropertySet itItemPropSet = new PropertySet(BasePropertySet.IdOnly,
ItemSchema.Attachments,
ItemSchema.Subject,
ItemSchema.Importance,
ItemSchema.DateTimeReceived,
ItemSchema.DateTimeSent,
ItemSchema.ItemClass,
ItemSchema.Size,
ItemSchema.Sensitivity,
EmailMessageSchema.From,
EmailMessageSchema.CcRecipients,
EmailMessageSchema.ToRecipients,
EmailMessageSchema.InternetMessageId,
ItemSchema.MimeContent,
isProcessedPropertyDefinition); //***
itemResults = service.FindItems(WellKnownFolderName.Inbox, itemView);
service.LoadPropertiesForItems(itemResults.Items, itItemPropSet);
String subject = itItem.Subject; //Exception: "You must load or assign this property before you can read its value."
//....
}
}
如您所见,在调用service.LoadPropertiesForItems()
时,它不会加载任何属性,因此在访问任何这些属性时会导致You must load or assign this property before you can read its value.
异常。
如果我从isProcessedPropertyDefinition
属性集中删除itItemPropSet
,则会正确获取所有属性。
我还能知道如何获取所有内置的EmailMessage属性以及扩展属性?
答案 0 :(得分:3)
您的GUID在最后一个破折号后太短了两位数。奇怪的是你没有看到FormatException。您仍应更新代码以检查每个项目的GetItemResponse。这样,如果在一个项目上发生某些错误,您的代码就可以意识到它。这意味着您需要再次制作另一个集合。
使用以下代码更新您的代码:
ServiceResponseCollection<ServiceResponse> responses = service.LoadPropertiesForItems(itemResults.Items, itItemPropSet);
foreach (ServiceResponse response in responses)
{
if (response.Result == ServiceResult.Error)
{
// Handle the error associated
}
else
{
String subject = (response as GetItemResponse).Item.Subject;
}
}
答案 1 :(得分:0)
而不是做 service.LoadPropertiesForItems(itemResults.Items,itItemPropSet);
尝试
itemResult.LoadPropertiesForItems(itItemPropSet);
获得项目后,您可以通过加载特定项目来加载项目的扩展属性。