/// <summary> /// Tries to load from XML. /// </summary> /// <param name="reader">The reader.</param> /// <param name="propertyDefinition">The property definition.</param> /// <returns>True if property was loaded.</returns> internal static bool TryLoadFromXml(EwsServiceXmlReader reader, ref PropertyDefinitionBase propertyDefinition) { switch (reader.LocalName) { case XmlElementNames.FieldURI: propertyDefinition = ServiceObjectSchema.FindPropertyDefinition(reader.ReadAttributeValue(XmlAttributeNames.FieldURI)); reader.SkipCurrentElement(); return(true); case XmlElementNames.IndexedFieldURI: propertyDefinition = new IndexedPropertyDefinition( reader.ReadAttributeValue(XmlAttributeNames.FieldURI), reader.ReadAttributeValue(XmlAttributeNames.FieldIndex)); reader.SkipCurrentElement(); return(true); case XmlElementNames.ExtendedFieldURI: propertyDefinition = new ExtendedPropertyDefinition(); (propertyDefinition as ExtendedPropertyDefinition).LoadFromXml(reader); return(true); default: return(false); } }
/// <summary> /// Tries to get property value. /// </summary> /// <param name="propertyDefinition">The property definition.</param> /// <param name="propertyValue">The property value.</param> /// <typeparam name="T">Type of expected property value.</typeparam> /// <returns>True if property exists in collection.</returns> internal bool TryGetValue <T>(ExtendedPropertyDefinition propertyDefinition, out T propertyValue) { ExtendedProperty extendedProperty; if (this.TryGetProperty(propertyDefinition, out extendedProperty)) { // Verify that the type parameter and property definition's type are compatible. if (!typeof(T).IsAssignableFrom(propertyDefinition.Type)) { string errorMessage = string.Format( Strings.PropertyDefinitionTypeMismatch, EwsUtilities.GetPrintableTypeName(propertyDefinition.Type), EwsUtilities.GetPrintableTypeName(typeof(T))); throw new ArgumentException(errorMessage, "propertyDefinition"); } propertyValue = (T)extendedProperty.Value; return(true); } else { propertyValue = default(T); return(false); } }
/// <summary> /// Gets the value of specified property in this instance. /// </summary> /// <param name="propertyDefinition">Definition of the property to get.</param> /// <exception cref="ServiceVersionException">Raised if this property requires a later version of Exchange.</exception> /// <exception cref="PropertyException">Raised if this property hasn't been assigned or loaded. Raised for set if property cannot be updated or deleted.</exception> public object this[PropertyDefinitionBase propertyDefinition] { get { object propertyValue; PropertyDefinition propDef = propertyDefinition as PropertyDefinition; if (propDef != null) { return(this.PropertyBag[propDef]); } else { ExtendedPropertyDefinition extendedPropDef = propertyDefinition as ExtendedPropertyDefinition; if (extendedPropDef != null) { if (this.TryGetExtendedProperty(extendedPropDef, out propertyValue)) { return(propertyValue); } else { throw new ServiceObjectPropertyException(Strings.MustLoadOrAssignPropertyBeforeAccess, propertyDefinition); } } else { // Other subclasses of PropertyDefinitionBase are not supported. throw new NotSupportedException(string.Format( Strings.OperationNotSupportedForPropertyDefinitionType, propertyDefinition.GetType().Name)); } } } }
/// <summary> /// Initializes a new instance of the <see cref="ExtendedProperty"/> class. /// </summary> /// <param name="propertyDefinition">The definition of the extended property.</param> internal ExtendedProperty(ExtendedPropertyDefinition propertyDefinition) : this() { EwsUtilities.ValidateParam(propertyDefinition, "propertyDefinition"); this.propertyDefinition = propertyDefinition; }
/// <summary> /// Tries to read element from XML. /// </summary> /// <param name="reader">The reader.</param> /// <returns>True if element was read.</returns> internal override bool TryReadElementFromXml(EwsServiceXmlReader reader) { switch (reader.LocalName) { case XmlElementNames.ExtendedFieldURI: this.propertyDefinition = new ExtendedPropertyDefinition(); this.propertyDefinition.LoadFromXml(reader); return(true); case XmlElementNames.Value: EwsUtilities.Assert( this.PropertyDefinition != null, "ExtendedProperty.TryReadElementFromXml", "PropertyDefintion is missing"); string stringValue = reader.ReadElementValue(); this.value = MapiTypeConverter.ConvertToValue(this.PropertyDefinition.MapiType, stringValue); return(true); case XmlElementNames.Values: EwsUtilities.Assert( this.PropertyDefinition != null, "ExtendedProperty.TryReadElementFromXml", "PropertyDefintion is missing"); StringList stringList = new StringList(XmlElementNames.Value); stringList.LoadFromXml(reader, reader.LocalName); this.value = MapiTypeConverter.ConvertToValue(this.PropertyDefinition.MapiType, stringList); return(true); default: return(false); } }
private static void GetAllFolders(Exchange.ExchangeService Service, string LogFilePath) { Exchange.ExtendedPropertyDefinition oIsHidden = default(Exchange.ExtendedPropertyDefinition); List <Exchange.Folder> oFolders = default(List <Exchange.Folder>); Exchange.FindFoldersResults oResults = default(Exchange.FindFoldersResults); bool lHasMore = false; Exchange.Folder oChild = default(Exchange.Folder); Exchange.FolderView oView = default(Exchange.FolderView); short nPageSize = 0; short nOffSet = 0; List <string> oPaths = default(List <string>); List <string> oPath = default(List <string>); oIsHidden = new Exchange.ExtendedPropertyDefinition(0x10f4, Exchange.MapiPropertyType.Boolean); nPageSize = 1000; oFolders = new List <Exchange.Folder>(); lHasMore = true; nOffSet = 0; while (lHasMore) { oView = new Exchange.FolderView(nPageSize, nOffSet, Exchange.OffsetBasePoint.Beginning); oView.PropertySet = new Exchange.PropertySet(Exchange.BasePropertySet.IdOnly); oView.PropertySet.Add(oIsHidden); oView.PropertySet.Add(Exchange.FolderSchema.ParentFolderId); oView.PropertySet.Add(Exchange.FolderSchema.DisplayName); oView.PropertySet.Add(Exchange.FolderSchema.FolderClass); oView.PropertySet.Add(Exchange.FolderSchema.TotalCount); oView.Traversal = Exchange.FolderTraversal.Deep; oResults = Service.FindFolders(Exchange.WellKnownFolderName.MsgFolderRoot, oView); oFolders.AddRange(oResults.Folders); lHasMore = oResults.MoreAvailable; if (lHasMore) { nOffSet += nPageSize; } } oFolders.RemoveAll(Folder => Folder.ExtendedProperties(0).Value == true); oFolders.RemoveAll(Folder => Folder.FolderClass != "IPF.Note"); oPaths = new List <string>(); oFolders.ForEach(Folder => { oChild = Folder; oPath = new List <string>(); do { oPath.Add(oChild.DisplayName); oChild = oFolders.SingleOrDefault(Parent => Parent.Id.UniqueId == oChild.ParentFolderId.UniqueId); } while (oChild != null); oPath.Reverse(); oPaths.Add("{0}{1}{2}".ToFormat(Strings.Join(oPath.ToArray, DELIMITER), Constants.vbTab, Folder.TotalCount)); }); oPaths.RemoveAll(Path => Path.StartsWith("Sync Issues")); File.WriteAllText(LogFilePath, Strings.Join(oPaths.ToArray, Constants.vbCrLf)); }
private static void SetContactTitle(Exchange.Contact contact, string title) { if (string.IsNullOrEmpty(title)) { return; } var titleExtendedProperty = new Exchange.ExtendedPropertyDefinition(TitleTagId, Exchange.MapiPropertyType.String); contact.SetExtendedProperty(titleExtendedProperty, title); }
/// <summary> /// Gets existing or adds new extended property. /// </summary> /// <param name="propertyDefinition">The property definition.</param> /// <returns>ExtendedProperty.</returns> private ExtendedProperty GetOrAddExtendedProperty(ExtendedPropertyDefinition propertyDefinition) { ExtendedProperty extendedProperty; if (!this.TryGetProperty(propertyDefinition, out extendedProperty)) { extendedProperty = new ExtendedProperty(propertyDefinition); this.InternalAdd(extendedProperty); } return(extendedProperty); }
/// <summary> /// Determines whether two specified instances of ExtendedPropertyDefinition are equal. /// </summary> /// <param name="extPropDef1">First extended property definition.</param> /// <param name="extPropDef2">Second extended property definition.</param> /// <returns>True if extended property definitions are equal.</returns> internal static bool IsEqualTo(ExtendedPropertyDefinition extPropDef1, ExtendedPropertyDefinition extPropDef2) { return (object.ReferenceEquals(extPropDef1, extPropDef2) || ((object)extPropDef1 != null && (object)extPropDef2 != null && extPropDef1.Id == extPropDef2.Id && extPropDef1.MapiType == extPropDef2.MapiType && extPropDef1.Tag == extPropDef2.Tag && extPropDef1.Name == extPropDef2.Name && extPropDef1.PropertySet == extPropDef2.PropertySet && extPropDef1.propertySetId == extPropDef2.propertySetId)); }
/// <summary> /// Removes a specific extended property definition from the collection. /// </summary> /// <param name="propertyDefinition">The definition of the extended property to remove.</param> /// <returns>True if the property matching the extended property definition was successfully removed from the collection, false otherwise.</returns> internal bool RemoveExtendedProperty(ExtendedPropertyDefinition propertyDefinition) { EwsUtilities.ValidateParam(propertyDefinition, "propertyDefinition"); ExtendedProperty extendedProperty; if (this.TryGetProperty(propertyDefinition, out extendedProperty)) { return(this.InternalRemove(extendedProperty)); } else { return(false); } }
/// <summary> /// Try to get the value of a specified extended property in this instance. /// </summary> /// <param name="propertyDefinition">The property definition.</param> /// <param name="propertyValue">The property value.</param> /// <typeparam name="T">Type of expected property value.</typeparam> /// <returns>True if property retrieved, false otherwise.</returns> internal bool TryGetExtendedProperty <T>(ExtendedPropertyDefinition propertyDefinition, out T propertyValue) { ExtendedPropertyCollection propertyCollection = this.GetExtendedProperties(); if ((propertyCollection != null) && propertyCollection.TryGetValue <T>(propertyDefinition, out propertyValue)) { return(true); } else { propertyValue = default(T); return(false); } }
/// <summary> /// Fills <paramref name="exchangeEmailMessage"/> headers collection using data from <paramref name="bpmEmailMessage"/>. /// </summary> /// <param name="exchangeEmailMessage"><see cref="Exchange.EmailMessage"/> instance.</param> /// <param name="bpmEmailMessage">Email message instance.</param> /// <returns><see cref="Exchange.EmailMessage"/> instance.</returns> private Exchange.EmailMessage SetHeaderProperties(Exchange.EmailMessage exchangeEmailMessage, EmailMessage bpmMessage) { List <EmailMessageHeader> headerProperties = bpmMessage.HeaderProperties; if (headerProperties != null) { foreach (var property in headerProperties) { var header = new Exchange.ExtendedPropertyDefinition(Exchange.DefaultExtendedPropertySet.InternetHeaders, property.Name, Exchange.MapiPropertyType.String); exchangeEmailMessage.SetExtendedProperty(header, property.Value); } } var PidTagInternetMessageId = new Exchange.ExtendedPropertyDefinition(_mapiMessageIdPropertyIdentifier, Exchange.MapiPropertyType.String); exchangeEmailMessage.SetExtendedProperty(PidTagInternetMessageId, bpmMessage.GetMessageId()); return(exchangeEmailMessage); }
/// <summary> /// Tries to load from XML. /// </summary> /// <param name="jsonObject">The json object.</param> /// <returns>True if property was loaded.</returns> internal static PropertyDefinitionBase TryLoadFromJson(JsonObject jsonObject) { switch (jsonObject.ReadTypeString()) { case JsonNames.PathToUnindexedFieldType: return(ServiceObjectSchema.FindPropertyDefinition(jsonObject.ReadAsString(XmlAttributeNames.FieldURI))); case JsonNames.PathToIndexedFieldType: return(new IndexedPropertyDefinition( jsonObject.ReadAsString(XmlAttributeNames.FieldURI), jsonObject.ReadAsString(XmlAttributeNames.FieldIndex))); case JsonNames.PathToExtendedFieldType: ExtendedPropertyDefinition propertyDefinition = new ExtendedPropertyDefinition(); propertyDefinition.LoadFromJson(jsonObject); return(propertyDefinition); default: return(null); } }
/// <summary> /// Parses the message XML. /// </summary> /// <param name="reader">The reader.</param> private void ParseMessageXml(EwsServiceXmlReader reader) { do { reader.Read(); if (reader.IsStartElement()) { switch (reader.LocalName) { case XmlElementNames.Value: this.errorDetails.Add(reader.ReadAttributeValue(XmlAttributeNames.Name), reader.ReadElementValue()); break; case XmlElementNames.FieldURI: this.errorProperties.Add(ServiceObjectSchema.FindPropertyDefinition(reader.ReadAttributeValue(XmlAttributeNames.FieldURI))); break; case XmlElementNames.IndexedFieldURI: this.errorProperties.Add( new IndexedPropertyDefinition( reader.ReadAttributeValue(XmlAttributeNames.FieldURI), reader.ReadAttributeValue(XmlAttributeNames.FieldIndex))); break; case XmlElementNames.ExtendedFieldURI: ExtendedPropertyDefinition extendedPropDef = new ExtendedPropertyDefinition(); extendedPropDef.LoadFromXml(reader); this.errorProperties.Add(extendedPropDef); break; default: break; } } } while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.MessageXml)); }
/// <summary> /// Loads from json. /// </summary> /// <param name="jsonProperty">The json property.</param> /// <param name="service">The service.</param> internal override void LoadFromJson(JsonObject jsonProperty, ExchangeService service) { foreach (string key in jsonProperty.Keys) { switch (key) { case XmlElementNames.ExtendedFieldURI: this.propertyDefinition = new ExtendedPropertyDefinition(); this.propertyDefinition.LoadFromJson(jsonProperty.ReadAsJsonObject(key)); break; case XmlElementNames.Value: EwsUtilities.Assert( this.PropertyDefinition != null, "ExtendedProperty.TryReadElementFromXml", "PropertyDefintion is missing"); string stringValue = jsonProperty.ReadAsString(key); this.value = MapiTypeConverter.ConvertToValue(this.PropertyDefinition.MapiType, stringValue); break; case XmlElementNames.Values: EwsUtilities.Assert( this.PropertyDefinition != null, "ExtendedProperty.TryReadElementFromXml", "PropertyDefintion is missing"); StringList stringList = new StringList(XmlElementNames.Value); ((IJsonCollectionDeserializer)stringList).CreateFromJsonCollection(jsonProperty.ReadAsArray(key), service); this.value = MapiTypeConverter.ConvertToValue(this.PropertyDefinition.MapiType, stringList); break; default: break; } } }
private void SetContactGender(Exchange.Contact contact, Guid genderId) { if (genderId == Guid.Empty) { return; } var extendedPropertyDefinition = new Exchange.ExtendedPropertyDefinition(GenderTagId, Exchange.MapiPropertyType.Short); switch (genderId.ToString().ToUpper()) { case ContactConsts.MaleId: contact.SetExtendedProperty(extendedPropertyDefinition, ExtendedPropertyGenderMaleValue); break; case ContactConsts.FemaleId: contact.SetExtendedProperty(extendedPropertyDefinition, ExtendedPropertyGenderFemaleValue); break; default: contact.SetExtendedProperty(extendedPropertyDefinition, ExtendedPropertyGenderNotSetValue); break; } }
/// <summary> /// Try to get the value of a specified property in this instance. /// </summary> /// <param name="propertyDefinition">The property definition.</param> /// <param name="propertyValue">The property value.</param> /// <typeparam name="T">Type of expected property value.</typeparam> /// <returns>True if property retrieved, false otherwise.</returns> public bool TryGetProperty <T>(PropertyDefinitionBase propertyDefinition, out T propertyValue) { PropertyDefinition propDef = propertyDefinition as PropertyDefinition; if (propDef != null) { return(this.PropertyBag.TryGetProperty <T>(propDef, out propertyValue)); } else { ExtendedPropertyDefinition extPropDef = propertyDefinition as ExtendedPropertyDefinition; if (extPropDef != null) { return(this.TryGetExtendedProperty <T>(extPropDef, out propertyValue)); } else { // Other subclasses of PropertyDefinitionBase are not supported. throw new NotSupportedException(string.Format( Strings.OperationNotSupportedForPropertyDefinitionType, propertyDefinition.GetType().Name)); } } }
static void exchCreateRetentionFolders(string strVersion, string strIuser, string strIpwd, string strIURL, List<string> lstMailboxes, Dictionary<string, Folders> dctFolders, Dictionary<string, Guid> dctGUIDs) { try { //TO DO: Externalize these items; however, for now, use predefined values. // Create Policy Tag Information //Retention Policy Flag x3019 ExtendedPropertyDefinition PolicyTag = new Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0x3019, Microsoft.Exchange.WebServices.Data.MapiPropertyType.Binary); // PR_RETENTION_PERIOD 0x301A ExtendedPropertyDefinition RetentionFlags = new Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0x301D, Microsoft.Exchange.WebServices.Data.MapiPropertyType.Integer); // Connect to Exchange Web Services ExchangeService service; switch (strVersion) { case "2007SP1": service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); break; case "2010": service = new ExchangeService(ExchangeVersion.Exchange2010); break; case "2010SP1": service = new ExchangeService(ExchangeVersion.Exchange2010_SP1); break; case "2010SP2": service = new ExchangeService(ExchangeVersion.Exchange2010_SP2); break; case "2013": service = new ExchangeService(ExchangeVersion.Exchange2013); break; default: service = new ExchangeService(ExchangeVersion.Exchange2010_SP1); break; } try { service.Credentials = new WebCredentials(strIuser, strIpwd); service.AutodiscoverUrl(strIURL); } catch (Exception ex) { Console.WriteLine("Error connecting to Exchange Server : " + ex.Message); return; } //Loop for people foreach (string _mailbox in lstMailboxes) { Console.WriteLine("Processing Mailbox : {0}", _mailbox); try { service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, _mailbox); //Iterate through folders //Start Folder / Policy creation process Console.WriteLine("\tCreating Folders..."); //Create working storage for Folder ID ExtendedPropertyDefinition fldrRetentionPolicyTag = null; System.Guid fldrRetentionPolicyGUID = Guid.NewGuid(); ExtendedPropertyDefinition fldrRetentionFlagTag = null; int fldrRetentionFlagValue = 0; foreach (KeyValuePair<string, Folders> _kvpFolder in dctFolders) { //Create working objects Folders _folder = _kvpFolder.Value; //if FolderID and ParentID are not null, they are from a previous mailbox and are invalid, reset these values. _folder.ParentID = null; _folder.ID = null; //Determine Retention Tag settings //Dictionary<string, Folders> dctFolders, Dictionary<string, Guid> dctGUIDs if (_folder.RetentionTagName != "" && _folder.RetentionTagName != null) { //Search for the specified GUID and assign dctGUIDs.TryGetValue(_folder.RetentionTagName, out fldrRetentionPolicyGUID); //Produce warning if match wasn't found if (fldrRetentionPolicyGUID == Guid.Empty) Console.WriteLine("\t\tWARNING: Folder {0} has specified a retention flag of {1} which could not be located. Ignoring retention setting.\n\t\tIf you supplied a GUID file (-g), ensure that retention GUIDs are correct.", _folder.FolderName, _folder.RetentionTagName); } if (fldrRetentionPolicyGUID != Guid.Empty) { fldrRetentionPolicyTag = PolicyTag; fldrRetentionFlagTag = RetentionFlags; fldrRetentionFlagValue = 145; } else { fldrRetentionPolicyTag = null; fldrRetentionFlagTag = null; fldrRetentionFlagValue = 0; } //Determine Parent Folder ID switch (_folder.ParentFolderName) { case "WellKnownFolderName.ArchiveDeletedItems": _folder.ParentID = WellKnownFolderName.ArchiveDeletedItems; break; case "WellKnownFolderName.ArchiveMsgFolderRoot": _folder.ParentID = WellKnownFolderName.ArchiveMsgFolderRoot; break; case "WellKnownFolderName.ArchiveRecoverableItemsDeletions": _folder.ParentID = WellKnownFolderName.ArchiveRecoverableItemsDeletions; break; case "WellKnownFolderName.ArchiveRecoverableItemsPurges": _folder.ParentID = WellKnownFolderName.ArchiveRecoverableItemsPurges; break; case "WellKnownFolderName.ArchiveRecoverableItemsRoot": _folder.ParentID = WellKnownFolderName.ArchiveRecoverableItemsRoot; break; case "WellKnownFolderName.ArchiveRecoverableItemsVersions": _folder.ParentID = WellKnownFolderName.ArchiveRecoverableItemsVersions; break; case "WellKnownFolderName.ArchiveRoot": _folder.ParentID = WellKnownFolderName.ArchiveRoot; break; case "WellKnownFolderName.DeletedItems": _folder.ParentID = WellKnownFolderName.DeletedItems; break; case "WellKnownFolderName.Drafts": _folder.ParentID = WellKnownFolderName.Drafts; break; case "WellKnownFolderName.Inbox": _folder.ParentID = WellKnownFolderName.Inbox; break; case "WellKnownFolderName.Journal": _folder.ParentID = WellKnownFolderName.Journal; break; case "WellKnownFolderName.JunkEmail": _folder.ParentID = WellKnownFolderName.JunkEmail; break; case "WellKnownFolderName.LocalFailures": _folder.ParentID = WellKnownFolderName.LocalFailures; break; case "WellKnownFolderName.MsgFolderRoot": _folder.ParentID = WellKnownFolderName.MsgFolderRoot; break; case "WellKnownFolderName.Notes": _folder.ParentID = WellKnownFolderName.Notes; break; case "WellKnownFolderName.Outbox": _folder.ParentID = WellKnownFolderName.Outbox; break; case "WellKnownFolderName.PublicFoldersRoot": _folder.ParentID = WellKnownFolderName.PublicFoldersRoot; break; case "WellKnownFolderName.QuickContacts": _folder.ParentID = WellKnownFolderName.QuickContacts; break; case "WellKnownFolderName.RecipientCache": _folder.ParentID = WellKnownFolderName.RecipientCache; break; case "WellKnownFolderName.RecoverableItemsDeletions": _folder.ParentID = WellKnownFolderName.RecoverableItemsDeletions; break; case "WellKnownFolderName.RecoverableItemsPurges": _folder.ParentID = WellKnownFolderName.RecoverableItemsPurges; break; case "WellKnownFolderName.RecoverableItemsRoot": _folder.ParentID = WellKnownFolderName.RecoverableItemsRoot; break; case "WellKnownFolderName.RecoverableItemsVersions": _folder.ParentID = WellKnownFolderName.RecoverableItemsVersions; break; case "WellKnownFolderName.Root": _folder.ParentID = WellKnownFolderName.Root; break; case "WellKnownFolderName.SearchFolders": _folder.ParentID = WellKnownFolderName.SearchFolders; break; case "WellKnownFolderName.SentItems": _folder.ParentID = WellKnownFolderName.SentItems; break; case "WellKnownFolderName.ServerFailures": _folder.ParentID = WellKnownFolderName.ServerFailures; break; case "WellKnownFolderName.SyncIssues": _folder.ParentID = WellKnownFolderName.SyncIssues; break; case "WellKnownFolderName.Tasks": _folder.ParentID = WellKnownFolderName.Tasks; break; case "WellKnownFolderName.ToDoSearch": _folder.ParentID = WellKnownFolderName.ToDoSearch; break; case "WellKnownFolderName.VoiceMail": _folder.ParentID = WellKnownFolderName.VoiceMail; break; default: //Not a system folder, so we need to go through the folders dictionary and find the ParentID Folders _parentfolder; dctFolders.TryGetValue(_folder.ParentFolderName, out _parentfolder); if (_parentfolder != null) _folder.ParentID = _parentfolder.ID; break; } if (_folder.ParentID != null) { //Create the folder entry /* Microsoft.Exchange.WebServices.Data.FolderId fldrParentID; ExtendedPropertyDefinition fldrRetentionPolicyTag; System.Guid fldrRetentionPolicyGUID; ExtendedPropertyDefinition fldrRetentionFlagTag; int fldrRetentionFlagValue; */ _folder.ID = exchCreateFolder(service, _folder.FolderName, _folder.ParentID, fldrRetentionPolicyTag, fldrRetentionPolicyGUID, fldrRetentionFlagTag, fldrRetentionFlagValue); } else { //Produce warning if match wasn't found Console.WriteLine("\t\tWARNING: Skipping folder {0}, unable to determine parent folder ID!", _folder.FolderName); } } // Write confirmation message to console window. Console.WriteLine("Folders created successfully for " + _mailbox); } catch (Exception ex) { Console.WriteLine("Error impersonating mailbox : " + _mailbox + ", Error : " + ex.Message); return; } } } catch (Exception ex) { Console.WriteLine("Error executing program : " + ex.Message); } }
/// <summary> /// Determines whether two specified instances of ExtendedPropertyDefinition are not equal. /// </summary> /// <param name="extPropDef1">First extended property definition.</param> /// <param name="extPropDef2">Second extended property definition.</param> /// <returns>True if extended property definitions are equal.</returns> public static bool operator !=(ExtendedPropertyDefinition extPropDef1, ExtendedPropertyDefinition extPropDef2) { return(!ExtendedPropertyDefinition.IsEqualTo(extPropDef1, extPropDef2)); }
/// <summary> /// Determines whether a given extended property definition is equal to this extended property definition. /// </summary> /// <param name="obj">The object to check for equality.</param> /// <returns>True if the properties definitions define the same extended property.</returns> public override bool Equals(object obj) { ExtendedPropertyDefinition propertyDefinition = obj as ExtendedPropertyDefinition; return(ExtendedPropertyDefinition.IsEqualTo(propertyDefinition, this)); }
/// <summary> /// Tries to get property. /// </summary> /// <param name="propertyDefinition">The property definition.</param> /// <param name="extendedProperty">The extended property.</param> /// <returns>True of property exists in collection.</returns> private bool TryGetProperty(ExtendedPropertyDefinition propertyDefinition, out ExtendedProperty extendedProperty) { extendedProperty = this.Items.Find((prop) => prop.PropertyDefinition.Equals(propertyDefinition)); return(extendedProperty != null); }
/// <summary> /// Sets the extended property. /// </summary> /// <param name="extendedPropertyDefinition">The extended property definition.</param> /// <param name="value">The value.</param> public void SetExtendedProperty(ExtendedPropertyDefinition extendedPropertyDefinition, object value) { this.ExtendedProperties.SetExtendedProperty(extendedPropertyDefinition, value); }
/// <summary> /// Sets an extended property. /// </summary> /// <param name="propertyDefinition">The property definition.</param> /// <param name="value">The value.</param> internal void SetExtendedProperty(ExtendedPropertyDefinition propertyDefinition, object value) { ExtendedProperty extendedProperty = this.GetOrAddExtendedProperty(propertyDefinition); extendedProperty.Value = value; }
/// <summary> /// Removes an extended property. /// </summary> /// <param name="extendedPropertyDefinition">The extended property definition.</param> /// <returns>True if property was removed.</returns> public bool RemoveExtendedProperty(ExtendedPropertyDefinition extendedPropertyDefinition) { return(this.ExtendedProperties.RemoveExtendedProperty(extendedPropertyDefinition)); }
static void exchCreateRetentionFolders(string strVersion, string strIuser, string strIpwd, string strIURL, List <string> lstMailboxes, Dictionary <string, Folders> dctFolders, Dictionary <string, Guid> dctGUIDs) { try { //TO DO: Externalize these items; however, for now, use predefined values. // Create Policy Tag Information //Retention Policy Flag x3019 ExtendedPropertyDefinition PolicyTag = new Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0x3019, Microsoft.Exchange.WebServices.Data.MapiPropertyType.Binary); // PR_RETENTION_PERIOD 0x301A ExtendedPropertyDefinition RetentionFlags = new Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0x301D, Microsoft.Exchange.WebServices.Data.MapiPropertyType.Integer); // Connect to Exchange Web Services ExchangeService service; switch (strVersion) { case "2007SP1": service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); break; case "2010": service = new ExchangeService(ExchangeVersion.Exchange2010); break; case "2010SP1": service = new ExchangeService(ExchangeVersion.Exchange2010_SP1); break; case "2010SP2": service = new ExchangeService(ExchangeVersion.Exchange2010_SP2); break; case "2013": service = new ExchangeService(ExchangeVersion.Exchange2013); break; default: service = new ExchangeService(ExchangeVersion.Exchange2010_SP1); break; } try { service.Credentials = new WebCredentials(strIuser, strIpwd); service.AutodiscoverUrl(strIURL); } catch (Exception ex) { Console.WriteLine("Error connecting to Exchange Server : " + ex.Message); return; } //Loop for people foreach (string _mailbox in lstMailboxes) { Console.WriteLine("Processing Mailbox : {0}", _mailbox); try { service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, _mailbox); //Iterate through folders //Start Folder / Policy creation process Console.WriteLine("\tCreating Folders..."); //Create working storage for Folder ID ExtendedPropertyDefinition fldrRetentionPolicyTag = null; System.Guid fldrRetentionPolicyGUID = Guid.NewGuid(); ExtendedPropertyDefinition fldrRetentionFlagTag = null; int fldrRetentionFlagValue = 0; foreach (KeyValuePair <string, Folders> _kvpFolder in dctFolders) { //Create working objects Folders _folder = _kvpFolder.Value; //if FolderID and ParentID are not null, they are from a previous mailbox and are invalid, reset these values. _folder.ParentID = null; _folder.ID = null; //Determine Retention Tag settings //Dictionary<string, Folders> dctFolders, Dictionary<string, Guid> dctGUIDs if (_folder.RetentionTagName != "" && _folder.RetentionTagName != null) { //Search for the specified GUID and assign dctGUIDs.TryGetValue(_folder.RetentionTagName, out fldrRetentionPolicyGUID); //Produce warning if match wasn't found if (fldrRetentionPolicyGUID == Guid.Empty) { Console.WriteLine("\t\tWARNING: Folder {0} has specified a retention flag of {1} which could not be located. Ignoring retention setting.\n\t\tIf you supplied a GUID file (-g), ensure that retention GUIDs are correct.", _folder.FolderName, _folder.RetentionTagName); } } if (fldrRetentionPolicyGUID != Guid.Empty) { fldrRetentionPolicyTag = PolicyTag; fldrRetentionFlagTag = RetentionFlags; fldrRetentionFlagValue = 145; } else { fldrRetentionPolicyTag = null; fldrRetentionFlagTag = null; fldrRetentionFlagValue = 0; } //Determine Parent Folder ID switch (_folder.ParentFolderName) { case "WellKnownFolderName.ArchiveDeletedItems": _folder.ParentID = WellKnownFolderName.ArchiveDeletedItems; break; case "WellKnownFolderName.ArchiveMsgFolderRoot": _folder.ParentID = WellKnownFolderName.ArchiveMsgFolderRoot; break; case "WellKnownFolderName.ArchiveRecoverableItemsDeletions": _folder.ParentID = WellKnownFolderName.ArchiveRecoverableItemsDeletions; break; case "WellKnownFolderName.ArchiveRecoverableItemsPurges": _folder.ParentID = WellKnownFolderName.ArchiveRecoverableItemsPurges; break; case "WellKnownFolderName.ArchiveRecoverableItemsRoot": _folder.ParentID = WellKnownFolderName.ArchiveRecoverableItemsRoot; break; case "WellKnownFolderName.ArchiveRecoverableItemsVersions": _folder.ParentID = WellKnownFolderName.ArchiveRecoverableItemsVersions; break; case "WellKnownFolderName.ArchiveRoot": _folder.ParentID = WellKnownFolderName.ArchiveRoot; break; case "WellKnownFolderName.DeletedItems": _folder.ParentID = WellKnownFolderName.DeletedItems; break; case "WellKnownFolderName.Drafts": _folder.ParentID = WellKnownFolderName.Drafts; break; case "WellKnownFolderName.Inbox": _folder.ParentID = WellKnownFolderName.Inbox; break; case "WellKnownFolderName.Journal": _folder.ParentID = WellKnownFolderName.Journal; break; case "WellKnownFolderName.JunkEmail": _folder.ParentID = WellKnownFolderName.JunkEmail; break; case "WellKnownFolderName.LocalFailures": _folder.ParentID = WellKnownFolderName.LocalFailures; break; case "WellKnownFolderName.MsgFolderRoot": _folder.ParentID = WellKnownFolderName.MsgFolderRoot; break; case "WellKnownFolderName.Notes": _folder.ParentID = WellKnownFolderName.Notes; break; case "WellKnownFolderName.Outbox": _folder.ParentID = WellKnownFolderName.Outbox; break; case "WellKnownFolderName.PublicFoldersRoot": _folder.ParentID = WellKnownFolderName.PublicFoldersRoot; break; case "WellKnownFolderName.QuickContacts": _folder.ParentID = WellKnownFolderName.QuickContacts; break; case "WellKnownFolderName.RecipientCache": _folder.ParentID = WellKnownFolderName.RecipientCache; break; case "WellKnownFolderName.RecoverableItemsDeletions": _folder.ParentID = WellKnownFolderName.RecoverableItemsDeletions; break; case "WellKnownFolderName.RecoverableItemsPurges": _folder.ParentID = WellKnownFolderName.RecoverableItemsPurges; break; case "WellKnownFolderName.RecoverableItemsRoot": _folder.ParentID = WellKnownFolderName.RecoverableItemsRoot; break; case "WellKnownFolderName.RecoverableItemsVersions": _folder.ParentID = WellKnownFolderName.RecoverableItemsVersions; break; case "WellKnownFolderName.Root": _folder.ParentID = WellKnownFolderName.Root; break; case "WellKnownFolderName.SearchFolders": _folder.ParentID = WellKnownFolderName.SearchFolders; break; case "WellKnownFolderName.SentItems": _folder.ParentID = WellKnownFolderName.SentItems; break; case "WellKnownFolderName.ServerFailures": _folder.ParentID = WellKnownFolderName.ServerFailures; break; case "WellKnownFolderName.SyncIssues": _folder.ParentID = WellKnownFolderName.SyncIssues; break; case "WellKnownFolderName.Tasks": _folder.ParentID = WellKnownFolderName.Tasks; break; case "WellKnownFolderName.ToDoSearch": _folder.ParentID = WellKnownFolderName.ToDoSearch; break; case "WellKnownFolderName.VoiceMail": _folder.ParentID = WellKnownFolderName.VoiceMail; break; default: //Not a system folder, so we need to go through the folders dictionary and find the ParentID Folders _parentfolder; dctFolders.TryGetValue(_folder.ParentFolderName, out _parentfolder); if (_parentfolder != null) { _folder.ParentID = _parentfolder.ID; } break; } if (_folder.ParentID != null) { //Create the folder entry /* * Microsoft.Exchange.WebServices.Data.FolderId fldrParentID; * ExtendedPropertyDefinition fldrRetentionPolicyTag; * System.Guid fldrRetentionPolicyGUID; * ExtendedPropertyDefinition fldrRetentionFlagTag; * int fldrRetentionFlagValue; */ _folder.ID = exchCreateFolder(service, _folder.FolderName, _folder.ParentID, fldrRetentionPolicyTag, fldrRetentionPolicyGUID, fldrRetentionFlagTag, fldrRetentionFlagValue); } else { //Produce warning if match wasn't found Console.WriteLine("\t\tWARNING: Skipping folder {0}, unable to determine parent folder ID!", _folder.FolderName); } } // Write confirmation message to console window. Console.WriteLine("Folders created successfully for " + _mailbox); } catch (Exception ex) { Console.WriteLine("Error impersonating mailbox : " + _mailbox + ", Error : " + ex.Message); return; } } } catch (Exception ex) { Console.WriteLine("Error executing program : " + ex.Message); } }