Filip Szesto
Filip Szesto

Reputation: 163

Outlook.MailItem.UserProperty disappear after sending mail

I'm trying to add custom UserProperty to MailItem while creating it.

I add an attachement's Hash as UserProperty to my MailItem object. Then I open my new MailItem in Outlook.

mi = olApp.CreateItem(Outlook.OlItemType.olMailItem) as Outlook.MailItem;
            Outlook.UserProperties mailUserProperties = null;
            Outlook.UserProperty mailUserProperty = null;

            mi.Attachments.Add(file.FilePath);
            mailUserProperties = mi.UserProperties;
            mailUserProperty = mailUserProperties.Add("AttachementsHash", Outlook.OlUserPropertyType.olText);
            mailUserProperty.Value = file.Hash;
            mi.Save();
            mi.Display();

If I check MailItem.UserProperties using OutlookSpy BEFORE sending I see that my mail has one UserProperty.

Then I click "Send Mail" in Outlook and I check my mail in SentItems folder. I can see UserProperties.Count == 0.

If anyone knows why my UserProperty disappear, please help me and tell :)

Upvotes: 2

Views: 1444

Answers (1)

Filip Szesto
Filip Szesto

Reputation: 163

With a lot of effort i resolved my problem.

UserProperties are removed after sending mail. But in stead of UserProperties I used MailItem.PropertyAccessor.SetProperty

MSDN Documentation of Property Accessor

        string prop = "http://schemas.microsoft.com/mapi/string/{00020386-0000-0000-C000-000000000046}/PropertyName";
        mi.PropertyAccessor.SetProperty(prop, propertyValue.ToString());

And then on event 'ItemAdd' I checked, if item was added to sentItems. If it Was added to sentItems I read properties using such construction:

Outlook.MailItem AddedMail = item as Outlook.MailItem;
                    string attachmentProperty = AddedMail.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x007D001E");

And then finnally I parse string in order to get my data.

I hope it will help anyone :)

Upvotes: 4

Related Questions