///<Summary>
        /// Add Custom Property
        ///</Summary>
        /// <param name="msg"></param>
        /// <param name="name"></param>
        /// <param name="value"></param>

        public static MapiProperty AddCustomProperty(this MapiMessage msg, string name, DateTime value)
        {
            var newProperty = MapiProperty.CreateMapiPropertyFromDateTime(msg.NamedPropertyMapping.GetNextAvailablePropertyId(MapiPropertyType.PT_SYSTIME), value);

            msg.AddCustomProperty(newProperty, name);
            return(newProperty);
        }
        ///<Summary>
        /// Add Custom Property
        ///</Summary>
        /// <param name="msg"></param>
        /// <param name="name"></param>
        /// <param name="type"></param>
        /// <param name="valueBytes"></param>
        public static MapiProperty AddCustomProperty(this MapiMessage msg, string name, MapiPropertyType type, byte[] valueBytes)
        {
            var newProperty = new MapiProperty(msg.NamedPropertyMapping.GetNextAvailablePropertyId(type), 0, valueBytes);

            msg.AddCustomProperty(newProperty, name);
            return(newProperty);
        }
        public static void Run()
        {
            string dataDir = RunExamples.GetDataDir_Outlook();

            MapiMessage msg = MapiMessage.FromFile(dataDir + "message.msg");

            // ExStart:SetAdditionalMAPIProperties
            // PT_MV_FLOAT, PT_MV_R4, mv.float
            IList <object> values = new List <object>();

            values.Add((float)1);
            values.Add((float)2);
            msg.SetProperty(new MapiProperty(0x23901004, values));

            // PT_MV_DOUBLE, PT_MV_R8
            values = new List <object>();
            values.Add((double)1);
            values.Add((double)2);
            msg.SetProperty(new MapiProperty(0x23901005, values));

            // PT_MV_CURRENCY, mv.fixed.14.4
            values = new List <object>();
            values.Add((decimal)123.34);
            values.Add((decimal)289.45);
            msg.SetProperty(new MapiProperty(0x23901006, values));

            // PT_MV_APPTIME
            values = new List <object>();
            values.Add(30456.34);
            values.Add(40655.45);
            msg.SetProperty(new MapiProperty(0x23901007, values));

            // PT_MV_I8, PT_MV_LONGLONG
            values = new List <object>();
            values.Add((long)30456);
            values.Add((long)40655);
            msg.SetProperty(new MapiProperty(0x23901014, values));

            // PT_MV_CLSID, mv.uuid
            values = new List <object>();
            values.Add(Guid.NewGuid());
            values.Add(Guid.NewGuid());
            msg.SetProperty(new MapiProperty(0x23901048, values));

            // PT_MV_SHORT, PT_MV_I2, mv.i2
            values = new List <object>();
            values.Add((short)1);
            values.Add((short)2);
            msg.SetProperty(new MapiProperty(0x23901002, values));

            // PT_MV_SYSTIME
            values = new List <object>();
            values.Add(DateTime.Now);
            values.Add(DateTime.Now);
            msg.SetProperty(new MapiProperty(0x23901040, values));

            // PT_MV_BOOLEAN
            values = new List <object>();
            values.Add(true);
            values.Add(false);
            msg.SetProperty(new MapiProperty(0x2390100b, values));

            // PT_MV_BINARY
            values = new List <object>();
            values.Add(Guid.NewGuid().ToByteArray());
            values.Add(new byte[] { 1, 2, 4, 5, 6, 7, 5, 4, 3, 5, 6, 7, 8, 6, 4, 3, 4, 5, 6, 7, 8, 6, 5, 4, 3, 7, 8, 9, 0, 2, 3, 4, });
            msg.SetProperty(new MapiProperty(0x23901102, values));

            // PT_NULL
            msg.SetProperty(new MapiProperty(0x67400001, new byte[1]));
            MapiMessage message = new MapiMessage("*****@*****.**", "*****@*****.**", "subj", "Body of test msg");

            // PT_MV_LONG
            values = new List <object>();
            values.Add((int)4);
            MapiProperty property = new MapiProperty(message.NamedPropertyMapping.GetNextAvailablePropertyId(MapiPropertyType.PT_MV_LONG), values);

            message.NamedPropertyMapping.AddNamedPropertyMapping(property, 0x00008028, new Guid("00062004-0000-0000-C000-000000000046"));
            message.SetProperty(property);

            // OR you can set the custom property (with the custom name)
            message = new MapiMessage("*****@*****.**", "*****@*****.**", "subj", "Body of test msg");
            values  = new List <object>();
            values.Add((int)4);
            property = new MapiProperty(message.NamedPropertyMapping.GetNextAvailablePropertyId(MapiPropertyType.PT_MV_LONG), values);
            message.AddCustomProperty(property, "customProperty");

            //PT_FLOAT
            //Please note that you need explicit cast to float value for this to work
            float        floatValue      = (float)123.456;
            MapiMessage  newMsg          = new MapiMessage();
            long         floatTag        = newMsg.NamedPropertyMapping.GetNextAvailablePropertyId(MapiPropertyType.PT_FLOAT);
            Guid         guid            = Guid.NewGuid();
            MapiProperty newMapiProperty = new MapiProperty(floatTag, BitConverter.GetBytes(floatValue));

            newMsg.NamedPropertyMapping.AddNamedPropertyMapping(newMapiProperty, 12, guid);
            newMsg.SetProperty(newMapiProperty);

            // ExEnd:SetAdditionalMAPIProperties
        }
 ///<Summary>
 /// Add Custom Property
 ///</Summary>
 /// <param name="msg"></param>
 /// <param name="name"></param>
 /// <param name="value"></param>
 public static MapiProperty AddCustomProperty(this MapiMessage msg, string name, string value)
 {
     return(msg.AddCustomProperty(name, MapiPropertyType.PT_UNICODE, Encoding.Unicode.GetBytes(value)));
 }
 ///<Summary>
 /// Add Custom Property
 ///</Summary>
 /// <param name="msg"></param>
 /// <param name="name"></param>
 /// <param name="value"></param>
 public static MapiProperty AddCustomProperty(this MapiMessage msg, string name, long value)
 {
     return(msg.AddCustomProperty(name, MapiPropertyType.PT_LONG, BitConverter.GetBytes(value)));
 }