private ItemId PopulateItemIdFromItemExtendedPropertyValues(ExtendedPropertyType[] extendedProperties)
        {
            string      id                = null;
            string      parentFolder      = null;
            string      primaryItemId     = null;
            uint        size              = 0U;
            string      subject           = null;
            int         documentId        = 0;
            string      text              = null;
            string      sender            = null;
            string      senderSmtpAddress = null;
            DateTime    minValue          = DateTime.MinValue;
            DateTime    minValue2         = DateTime.MinValue;
            string      importance        = null;
            bool        isRead            = false;
            string      text2             = null;
            BodyTagInfo btInfo            = null;
            bool        sentItems         = false;

            if (extendedProperties != null)
            {
                foreach (ExtendedPropertyType extendedPropertyType in extendedProperties)
                {
                    if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertySetId, Constants.MailboxItemIdPropertyIdSet, StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.ItemIdExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.ItemIdExtendedProperty.PropertyType)
                        {
                            id = (string)extendedPropertyType.Item;
                        }
                        else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.ParentFolderIdExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.ParentFolderIdExtendedProperty.PropertyType)
                        {
                            parentFolder = (string)extendedPropertyType.Item;
                        }
                        else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.PrimaryItemIdExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.PrimaryItemIdExtendedProperty.PropertyType)
                        {
                            primaryItemId = (string)extendedPropertyType.Item;
                        }
                        else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.ItemSizeExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.ItemSizeExtendedProperty.PropertyType)
                        {
                            uint.TryParse(extendedPropertyType.Item as string, out size);
                        }
                        else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.DocumentIdExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.DocumentIdExtendedProperty.PropertyType)
                        {
                            int.TryParse(extendedPropertyType.Item as string, out documentId);
                        }
                        else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.SubjectExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.SubjectExtendedProperty.PropertyType)
                        {
                            subject = MailboxItemIdList.DecodeDataFromEws((string)extendedPropertyType.Item);
                        }
                        else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.SenderExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.SenderExtendedProperty.PropertyType)
                        {
                            sender = MailboxItemIdList.DecodeDataFromEws((string)extendedPropertyType.Item);
                        }
                        else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.SenderSmtpAddressExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.SenderExtendedProperty.PropertyType)
                        {
                            senderSmtpAddress = MailboxItemIdList.DecodeDataFromEws((string)extendedPropertyType.Item);
                        }
                        else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.ReceivedTimeExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.ReceivedTimeExtendedProperty.PropertyType)
                        {
                            DateTime.TryParse(extendedPropertyType.Item as string, out minValue);
                        }
                        else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.SentTimeExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.SentTimeExtendedProperty.PropertyType)
                        {
                            DateTime.TryParse(extendedPropertyType.Item as string, out minValue2);
                        }
                        else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.ImportanceExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.ImportanceExtendedProperty.PropertyType)
                        {
                            importance = (string)extendedPropertyType.Item;
                        }
                        else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.IsReadExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.IsReadExtendedProperty.PropertyType)
                        {
                            bool.TryParse(extendedPropertyType.Item as string, out isRead);
                        }
                        else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.InternetMessageIdExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.InternetMessageIdExtendedProperty.PropertyType)
                        {
                            text = (string)extendedPropertyType.Item;
                        }
                        else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.ConversationTopicExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.ConversationTopicExtendedProperty.PropertyType)
                        {
                            text2 = MailboxItemIdList.DecodeDataFromEws((string)extendedPropertyType.Item);
                        }
                        else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.IsSentItemsExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.IsSentItemsExtendedProperty.PropertyType)
                        {
                            sentItems = bool.Parse((string)extendedPropertyType.Item);
                        }
                        else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.BodyTagInfoExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.BodyTagInfoExtendedProperty.PropertyType)
                        {
                            string s         = (string)extendedPropertyType.Item;
                            byte[] byteArray = Convert.FromBase64String(s);
                            btInfo = BodyTagInfo.FromByteArray(byteArray);
                        }
                    }
                }
                string uniqueHash = null;
                if (!string.IsNullOrEmpty(text) && !string.IsNullOrEmpty(text2))
                {
                    uniqueHash = new UniqueItemHash(text, text2, btInfo, sentItems).ToString();
                }
                return(new ItemId
                {
                    Id = id,
                    ParentFolder = parentFolder,
                    PrimaryItemId = primaryItemId,
                    Size = size,
                    Subject = subject,
                    DocumentId = documentId,
                    InternetMessageId = text,
                    Sender = sender,
                    SenderSmtpAddress = senderSmtpAddress,
                    ReceivedTime = minValue,
                    SentTime = minValue2,
                    Importance = importance,
                    IsRead = isRead,
                    UniqueHash = uniqueHash,
                    SourceId = this.sourcePrimarySmtpAddress
                });
            }
            return(null);
        }
        private ExtendedPropertyType[] CreateItemExtendedPropertyValuesFromItemId(ItemId itemId)
        {
            List <ExtendedPropertyType> list = new List <ExtendedPropertyType>(10);

            if (!string.IsNullOrEmpty(itemId.Id))
            {
                list.Add(new ExtendedPropertyType
                {
                    ExtendedFieldURI = MailboxItemIdList.ItemIdExtendedProperty,
                    Item             = itemId.Id
                });
            }
            if (!string.IsNullOrEmpty(itemId.ParentFolder))
            {
                list.Add(new ExtendedPropertyType
                {
                    ExtendedFieldURI = MailboxItemIdList.ParentFolderIdExtendedProperty,
                    Item             = itemId.ParentFolder
                });
            }
            if (!string.IsNullOrEmpty(itemId.PrimaryItemId))
            {
                list.Add(new ExtendedPropertyType
                {
                    ExtendedFieldURI = MailboxItemIdList.PrimaryItemIdExtendedProperty,
                    Item             = itemId.PrimaryItemId
                });
            }
            if (itemId.Size != 0U)
            {
                list.Add(new ExtendedPropertyType
                {
                    ExtendedFieldURI = MailboxItemIdList.ItemSizeExtendedProperty,
                    Item             = itemId.Size.ToString()
                });
            }
            if (!string.IsNullOrEmpty(itemId.Subject))
            {
                list.Add(new ExtendedPropertyType
                {
                    ExtendedFieldURI = MailboxItemIdList.SubjectExtendedProperty,
                    Item             = MailboxItemIdList.EncodeDataForEws(itemId.Subject)
                });
            }
            if (itemId.DocumentId != 0)
            {
                list.Add(new ExtendedPropertyType
                {
                    ExtendedFieldURI = MailboxItemIdList.DocumentIdExtendedProperty,
                    Item             = itemId.DocumentId.ToString()
                });
            }
            if (!string.IsNullOrEmpty(itemId.Sender))
            {
                list.Add(new ExtendedPropertyType
                {
                    ExtendedFieldURI = MailboxItemIdList.SenderExtendedProperty,
                    Item             = MailboxItemIdList.EncodeDataForEws(itemId.Sender)
                });
            }
            if (!string.IsNullOrEmpty(itemId.SenderSmtpAddress))
            {
                list.Add(new ExtendedPropertyType
                {
                    ExtendedFieldURI = MailboxItemIdList.SenderSmtpAddressExtendedProperty,
                    Item             = MailboxItemIdList.EncodeDataForEws(itemId.SenderSmtpAddress)
                });
            }
            if (itemId.ReceivedTime != DateTime.MinValue)
            {
                list.Add(new ExtendedPropertyType
                {
                    ExtendedFieldURI = MailboxItemIdList.ReceivedTimeExtendedProperty,
                    Item             = itemId.ReceivedTime.ToString()
                });
            }
            if (itemId.SentTime != DateTime.MinValue)
            {
                list.Add(new ExtendedPropertyType
                {
                    ExtendedFieldURI = MailboxItemIdList.SentTimeExtendedProperty,
                    Item             = itemId.SentTime.ToString()
                });
            }
            if (!string.IsNullOrEmpty(itemId.Importance))
            {
                list.Add(new ExtendedPropertyType
                {
                    ExtendedFieldURI = MailboxItemIdList.ImportanceExtendedProperty,
                    Item             = itemId.Importance
                });
            }
            list.Add(new ExtendedPropertyType
            {
                ExtendedFieldURI = MailboxItemIdList.IsReadExtendedProperty,
                Item             = itemId.IsRead.ToString()
            });
            if (!string.IsNullOrEmpty(itemId.UniqueHash))
            {
                UniqueItemHash uniqueItemHash = UniqueItemHash.Parse(itemId.UniqueHash);
                if (!string.IsNullOrEmpty(uniqueItemHash.InternetMessageId))
                {
                    list.Add(new ExtendedPropertyType
                    {
                        ExtendedFieldURI = MailboxItemIdList.InternetMessageIdExtendedProperty,
                        Item             = uniqueItemHash.InternetMessageId
                    });
                }
                if (!string.IsNullOrEmpty(uniqueItemHash.ConversationTopic))
                {
                    list.Add(new ExtendedPropertyType
                    {
                        ExtendedFieldURI = MailboxItemIdList.ConversationTopicExtendedProperty,
                        Item             = MailboxItemIdList.EncodeDataForEws(uniqueItemHash.ConversationTopic)
                    });
                }
                list.Add(new ExtendedPropertyType
                {
                    ExtendedFieldURI = MailboxItemIdList.IsSentItemsExtendedProperty,
                    Item             = uniqueItemHash.IsSentItems.ToString()
                });
                if (uniqueItemHash.BodyTagInfo != null)
                {
                    byte[] inArray = uniqueItemHash.BodyTagInfo.ToByteArray();
                    string item    = Convert.ToBase64String(inArray);
                    list.Add(new ExtendedPropertyType
                    {
                        ExtendedFieldURI = MailboxItemIdList.BodyTagInfoExtendedProperty,
                        Item             = item
                    });
                }
            }
            return(list.ToArray());
        }