/// <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);
            }
        }
Exemple #2
0
        /// <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);
            }
        }
Exemple #3
0
        /// <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));
    }
Exemple #7
0
        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);
            }
        }
Exemple #12
0
        /// <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);
            }
        }
Exemple #14
0
        /// <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;
                }
            }
        }
Exemple #16
0
        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);
 }
Exemple #22
0
 /// <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;
        }
Exemple #24
0
 /// <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);
            }
        }