Я пытаюсь сохранить некоторые данные в свойствах пользователя, а затем написать почту в файл .msg и (позже) перезагрузить файл .msg, чтобы прочитать свойство пользователя.Outlook OpenSharedItem теряет свойства пользователя
Проблема заключается в следующем: после перезагрузки файла у меня больше нет пользовательского свойства.
Я использую 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
, но в этом случае свойство пользователя также нулевой ...
BTW этот кусок кода является тестовый образец, поэтому он не dispose
правильно все ссылки COM.
Благодарим за помощь. Тем временем я также нашел эту ссылку, которая дала описание того, что происходит: http://www.pcreview.co.uk/forums/saveas-sometimes-loses-userproperty-t2349355.html К несчастью, оба решения, которые вы предлагаете, не могут возможно, поскольку файл msg должен храниться на выделенном сервере. – Fabske