Manupilation of extended properties with exchange 2007 [[http://www.infinitec.de/post/2007/10/20/Manipulation-of-extended-properties- with-Exchange-2007-using-the-ExtendedPropertyType-type.aspx|link]] PathToExtendedFieldType propertyId = new PathToExtendedFieldType(); propertyId.DistinguishedPropertySetId = DistinguishedPropertySetType.Appointment; propertyId.PropertyId = 0x820e; propertyId.PropertyType = MapiPropertyTypeType.SystemTime; propertyId.PropertyIdSpecified = true; propertyId.DistinguishedPropertySetIdSpecified = true; private static ExtendedPropertyType CreateExtendedProperty(PathToExtendedFieldType id, IEnumerable values) { ExtendedPropertyType result = newExtendedPropertyType(); result.ExtendedFieldURI = id; result.Item = (values != null) ? newList(values).ConvertAll(delegate(T input) { return SerializeValue(input); }).ToArray() : null; return result; } private ExtendedPropertyType CreateExtendedProperty(PathToExtendedFieldType id, T value) { ExtendedPropertyType result = newExtendedPropertyType(); result.ExtendedFieldURI = id; result.Item = SerializeValue(value); return result; } private static string SerializeValue(T value) { Type type; TypeConverter converter; object result; result = value; if (result == null) return null; //Unbox nullable types type = Nullable.GetUnderlyingType(typeof(T)); if (type != null) { converter = new NullableConverter(typeof(T)); result = converter.ConvertTo(value, type); } else type = typeof(T); if (type.IsEnum) { result = Convert.ChangeType(result, Enum.GetUnderlyingType(type)); return result.ToString(); } elseif (type == typeof(DateTime)) { return XmlConvert.ToString(((DateTime)result).ToUniversalTime(), XmlDateTimeSerializationMode.Utc); } elseif (type == typeof(bool)) { return ((bool)result) ? "1" : "0"; } elseif (type == typeof(byte[])) { return Convert.ToBase64String((byte[])result); } else { return string.Format(CultureInfo.InvariantCulture, "{0}", result); } }