я кодирование простого C# программы, которая пытается сохранить некоторые пользовательские свойства в Outlook, MailItem как метаданные ... Я создал этот простой метод для того, чтобы написать одно свойство:Сохранить пользовательское свойство в Outlook, MailItem постоянно
public static void AddCustomPropertyToEmail(Outlook.MailItem mail, string propKey, object propValue){
if (propValue is System.Int32) { // INT
mail.UserProperties.Add(propKey, Outlook.OlUserPropertyType.olInteger,true, Outlook.OlFormatInteger.olFormatIntegerPlain);
}
else if (propValue is System.Double){ // DOUBLE
mail.UserProperties.Add(propKey,Outlook.OlUserPropertyType.olCurrency,true,Outlook.OlFormatCurrency.olFormatCurrencyDecimal);
}
mail.UserProperties[propKey].Value = propValue;
mail.Save();
}
и это для того, чтобы прочитать одно свойство:
public static string GetCustomPropertyFromEmail(Outlook.MailItem mail, string propKey){
return (mail.UserProperties[propKey] != null) ? mail.UserProperties[propKey].Value.ToString() : null;
}
при печати на консоли каждое свойство, что я добавил перед печатью идет хорошо, только если я прочитал свойство из одного типа MailItem, хранящегося в память ... Например:
static void Main(string[] args){
Outlook.Application outlookObj = new Outlook.Application();
Outlook.MailItem m1 = GetCurrentEmailItem(outlookObj);
AddCustomPropertyToEmail(m1, “Int”, 100);
AddCustomPropertyToEmail(m1, “Double”, 2.0003);
Console.WriteLine(GetCustomPropertyFromEmail(m2, “Int”));
Console.WriteLine(GetCustomPropertyFromEmail(m2, “Double”));
if (m1 != null) Marshal.ReleaseComObject(m1);
Console.ReadKey();
}
Эта программа отлично работает, печатает значения !!!
Но код последующий не происходит, она возвращает нуль в каждом случае:
static void Main(string[] args){
Outlook.Application outlookObj = new Outlook.Application();
Outlook.MailItem m1 = GetCurrentEmailItem(outlookObj);
AddCustomPropertyToEmail(m1, “Int”, 100);
AddCustomPropertyToEmail(m1, “Double”, 2.0003);
m1.SaveAs(@”C:\PWS\myMail.msg”, Outlook.OlSaveAsType.olMSG);
Outlook.MailItem m2 = (Outlook.MailItem)outlookObj.CreateItem(Outlook.OlItemType.olMailItem);
m2 = (Outlook.MailItem)outlookObj.Session.OpenSharedItem(@”C:\PWS\myMail.msg”);
// HERE THE PROGRAM PRINTS NULL
Console.WriteLine(GetCustomPropertyFromEmail(m2, “Int”));
Console.WriteLine(GetCustomPropertyFromEmail(m2, “Double”));
if (m2 != null) Marshal.ReleaseComObject(m2);
Console.ReadKey();
}
Мой вопрос: Как я могу сохранить/хранить пользовательские свойства в MailItem, и, возможно, сохранить соответствующий файл Сообщи в моем PWS и прочитать эти пользовательские свойства во второй раз ???
@ Dimitry- В конце функции AddCustomPropertyToEmail() я вызываю mail.Save(). Разве этого недостаточно? – atomicBee
Этого должно быть достаточно. Проверьте с помощью OutlookSpy (щелкните OpenIMsgOnIStg), что файл MSG действительно имеет ваши настраиваемые свойства. Кроме того, UserProperties.Add возвращает объект UserProperty. Нет причин добавлять его сначала (игнорируя результат), затем снова обращайтесь к нему с помощью mail.UserProperties []. –
@ Dimitry- Когда я смотрю на пользовательские свойства в Проводнике Windows, нет предметов! Кажется, что метод UserProperties.Add() сохраняет пользовательские свойства только внутри MailItem, которые находятся в папке «Входящие». Сохранение формата MailItem в формате .msg не позволяет хранить эту информацию внутри файла. – atomicBee