Outlook.MailItem.UserProperty在发送邮件后消失

时间:2016-11-04 13:32:40

标签: c# .net outlook

我尝试在创建时将自定义UserProperty添加到MailItem。

我将一个附件的哈希作为UserProperty添加到我的MailItem对象。 然后我在Outlook中打开我的新MailItem。

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();

如果我使用OutlookSpy检查MailItem.UserProperties,请在发送之前看到我的邮件有一个UserProperty。

然后我点击"发送邮件"在Outlook中,我在SentItems文件夹中检查我的邮件。 我可以看到UserProperties.Count == 0。

如果有人知道我的UserProperty消失的原因,请帮助我并告诉:)

1 个答案:

答案 0 :(得分:3)

我付出了很多努力解决了我的问题。

发送邮件后删除UserProperties。但是我使用了MailItem.PropertyAccessor.SetProperty

来代替UserProperties

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());

然后在'ItemAdd'事件中,我检查了项目是否已添加到sentItems。 如果它被添加到sentItems我使用这样的结构读取属性:

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

然后我最后解析字符串以获取我的数据。

我希望它可以帮助任何人:)