Our Man in Bananas
Our Man in Bananas

Reputation: 5979

EWS error when retrieving complex property

We have an Exchange Web Services application that is throwing errors when an email is referenced that doesn't have a subject.

Our automated process needs to use the subject of the email, so the code is trying to reference it. However, when the subject is missing for an email in the inbox, instead of throwing an error, I want to change the behaviour.

Here is my code:

//creates an object that will represent the desired mailbox
Mailbox mb = new Mailbox(common.strInboxURL);

//creates a folder object that will point to inbox fold
FolderId fid = new FolderId(WellKnownFolderName.Inbox, mb);

... code removed fro brevity ...

// Find the first email message in the Inbox that has attachments. This results in a FindItem operation call to EWS.
FindItemsResults<Item> results = service.FindItems(fid, searchFilterCollection, view);

if (results.Count() > 0)
    {
    do
        {
        // set the prioperties we need for the entire result set
        view.PropertySet = new PropertySet(
            BasePropertySet.IdOnly,
            ItemSchema.Subject,
            ItemSchema.DateTimeReceived,
            ItemSchema.DisplayTo, EmailMessageSchema.ToRecipients,
            EmailMessageSchema.From, EmailMessageSchema.IsRead,
            EmailMessageSchema.HasAttachments, ItemSchema.MimeContent,
            EmailMessageSchema.Body, EmailMessageSchema.Sender,
            ItemSchema.Body) { RequestedBodyType = BodyType.Text };

        // load the properties for the entire batch
        service.LoadPropertiesForItems(results, view.PropertySet);

so in that code, the error is being thrown on the complex property get on the line service.LoadPropertiesForItems(results, view.PropertySet); at the end.

So, I know I am going to have to do something like a Try..Catch here, however, I would need to check that the Subject property of the mail item exists before I can reference it to see what it is - some kind of chicken and egg problem.

If there is no subject, I need to mark the email as read, send a warning email off to a team, and then gon onwith the next unread email in the mailbox.

Any suggestions about the best way to approach this would be appreciated.

Thanks

Upvotes: 0

Views: 481

Answers (1)

Glen Scales
Glen Scales

Reputation: 22032

Is the Subject not set or is it blank ?

You should be able to isolate any of these type of Emails with a SearchFitler eg use an Exists Search filter for the Subject property and then negate it so it will return any items where the Subject is not set

        SearchFilter sfSearchFilteri = new SearchFilter.Exists(ItemSchema.Subject);
        SearchFilter Negatesf = new SearchFilter.Not(sfSearchFilteri);

        service.FindItems(WellKnownFolderName.Inbox, Negatesf, new ItemView(1000));

Then just exclude those items from your LoadPropertiesForItems

Cheers Glen

Upvotes: 1

Related Questions