views:

334

answers:

0

I need to modify many MailItems in Outlook 2007.

I need the mails to immediately refresh in the main Outlook grid - the only way to do this I found is to call MailItem.Save().

foreach (var item in folder.Items)
{
    var mail = item as MailItem;
    if (mail != null)     // process only MailItems
    {
        setUserProperty(mail, userPropKey, "speed test");  
        mail.Save();      // Save() to make the grid row redraw
        if (++cnt == 10)  // stop after 10 mails
            break;
    }
}

The problem is that Save() is slow on IMAP account - 1s per 1 Save() call, probably due to communication with server. On POP3 account it is ok.

The modification I need to make on every email is just changing a User property. I have a custom View defined in Outlook that shows a column with this property.

Is there a way to:

  • make the user property local to PST, so that no communication with server is done on Save() ?
  • do all the Save() calls in one batch ?

I'm setting user property on emails like this:

void setUserProperty(Outlook.MailItem item, string key, string value)
{
     item.UserProperties.Add(key, Outlook.OlUserPropertyType.olText, true, Outlook.OlFormatText.olFormatTextText);
     item.UserProperties[key].Value = value;
}