在mailitem和相关的.msg文件中永久存储属性

时间:2014-11-14 12:01:59

标签: c# outlook ms-office

我需要在Outlook Mailitem中永久保存一些自定义信息并将其检索回来。 我的案例场景如下:我在Outlook 2013资源管理器中选择一封电子邮件,在该电子邮件中写入一些信息,将其作为.msg文件保存在我的磁盘上,从收件箱Outlook文件夹中删除电子邮件,打开.msg文件作为Outlook。 MailItem并读取该信息以保留或更改它们。

我正在使用Outlook.ItemProperties.Add()方法在所选的MailItem中添加自定义ItemProperty。

当我从.msg获取MailItem时,我无法找到该属性。

我使用了OutlookSpy - >杂项 - > OpenIMsgOnIstg函数来检查.msg,我注意到所有属性都在GetProps标签中。

我的问题是:我如何阅读这些属性?

以下是编写属性并将邮件另存为.msg的代码:

Outlook.Application outApp= new Outlook.Application();
Outlook.MailItem mail= null;
try { mail = (Outlook.MailItem)outApp.ActiveInspector().CurrentItem; }
catch {
   if (outApp.ActiveExplorer().Selection.Count > 0)
      mail = (Outlook.MailItem)outApp .ActiveExplorer().Selection[1];
   else { // ERROR  }
}
Outlook.ItemProperty prop01 = mail.ItemProperties.Add("MyProperty01", Outlook.OlUserPropertyType.olText);
prop01.Value = "hola";
Outlook.ItemProperty prop02 = mail.ItemProperties.Add("MyProperty02", Outlook.OlUserPropertyType.olNumber);
prop02.Value = 23;
mail.Save();
mail.SaveAs(@"C:\WorkSpace\mail.msg", Outlook.OlSaveAsType.olMSG);
if (mail != null) Marshal.ReleaseComObject(mail);
if (outlookObj != null) Marshal.ReleaseComObject(outApp );

以下是我在Outlook中删除电子邮件后从.msg读取属性的代码:

Outlook.Application outApp= new Outlook.Application();
Outlook.MailItem msgMail=(Outlook.MailItem)outApp.CreateItem(Outlook.OlItemType.olMailItem);
msgMail = (Outlook.MailItem)outApp.Session.OpenSharedItem(@"C:\WorkSpace\mail.msg");
Outlook.ItemProperties mailProps = msgMail.ItemProperties;
Outlook.ItemProperty pr = mailProps["MyProperty01"]; // pr IS NULL

但OutlookSpy shows属性位于.msg文件中。

2 个答案:

答案 0 :(得分:0)

使用Mailitem.PropertyAccessor.GetProperty并传递OutlookSpy显示的DASL属性名称。

答案 1 :(得分:0)

我在this绕过解决方案后解决了我的问题。