我正在尝试在用户属性中存储一些数据,然后将邮件写入 .msg 文件,然后(稍后)重新加载 .msg 文件以读取用户属性。
问题是:重新加载文件后,我不再拥有任何用户属性。
我正在使用 Outlook 2010 32 位
这是一段显示行为的代码:
Outlook.MailItem originalItem = ((MailItemWrapper)this.Item)._item;
var path = System.IO.Path.GetTempFileName() + ".msg";
var propName = "ActionId123456789";
// Set a user property "ActionId" with value "test"
var ps = originalItem.UserProperties;
var p = ps.Find(propName);
if (p == null)
p = ps.Add(propName, Outlook.OlUserPropertyType.olText, Type.Missing);
p.Value = "test";
// Save to a temp file
originalItem.Save(); // --> I also tried without this line
originalItem.SaveAs(path);
// Chech the the property is correctly set
p = originalItem.UserProperties[propName];
if (p != null)
Console.WriteLine(p.Value); // ---> Show 'test'
// Open the temp file
Outlook.MailItem newItem = AddinModule.CurrentInstance.OutlookApp.Session.OpenSharedItem(path) as Outlook.MailItem;
// Check that the property still exists
p = newItem.UserProperties[propName];
if (p != null)
Console.WriteLine(p.Value); // ---> Not executed: p is NULL !
有人知道该怎么做吗?
除了使用OpenSharedItem
,我还尝试使用打开邮件Process.Start
,但在这种情况下,用户属性也是 null ...
顺便说一句,这段代码是一个测试样本,所以它不能dispose
正确地引用所有 COM 引用。