示例#1
0
        private bool IsDuplicateMessageBySiteMailboxDrop(MailboxSession session, CoreItem item)
        {
            if (item.Origin != Origin.New)
            {
                return(false);
            }
            item.PropertyBag.Load(COWSiteMailboxMessageDedup.PropItemClass);
            if (item.ClassName() != "IPM.Note")
            {
                return(false);
            }
            byte[]     array      = item.PropertyBag.TryGetProperty(StoreObjectSchema.ParentEntryId) as byte[];
            string     text       = item.PropertyBag.TryGetProperty(ItemSchema.InternetMessageId) as string;
            string     text2      = item.PropertyBag.TryGetProperty(MessageItemSchema.SenderSmtpAddress) as string;
            ExDateTime?exDateTime = item.PropertyBag.TryGetProperty(ItemSchema.SentTime) as ExDateTime?;
            string     a          = item.PropertyBag.TryGetProperty(ItemSchema.Subject) as string;

            if (array == null || string.IsNullOrEmpty(text) || string.IsNullOrEmpty(text2) || exDateTime == null)
            {
                COWSiteMailboxMessageDedup.Tracer.TraceError((long)this.GetHashCode(), "COWSiteMailboxMessageDedup.IsDuplicateMessageBySiteMailboxDrop: required poperties are not complete, rawId: {0}, internetMessageId: {1}, senderSmtpAddress: {2}, sentTime: {3}", new object[]
                {
                    array,
                    text,
                    text2,
                    exDateTime
                });
                return(false);
            }
            int           hashValue = (int)AllItemsFolderHelper.GetHashValue(text);
            StoreObjectId folderId  = StoreObjectId.FromProviderSpecificId(array, StoreObjectType.Message);

            using (Folder folder = Folder.Bind(session, folderId))
            {
                using (QueryResult queryResult = folder.ItemQuery(ItemQueryType.None, null, COWSiteMailboxMessageDedup.DedupSortBy, COWSiteMailboxMessageDedup.DedupProperties))
                {
                    if (!queryResult.SeekToCondition(SeekReference.OriginBeginning, new ComparisonFilter(ComparisonOperator.Equal, ItemSchema.InternetMessageIdHash, hashValue)))
                    {
                        return(false);
                    }
                    IStorePropertyBag[] array2 = AllItemsFolderHelper.ProcessQueryResult(queryResult, text, hashValue);
                    if (array2 == null)
                    {
                        COWSiteMailboxMessageDedup.Tracer.TraceDebug((long)this.GetHashCode(), "COWSiteMailboxMessageDedup.IsDuplicateMessageBySiteMailboxDrop: propertyBags is null for ProcessQueryResult.");
                        return(false);
                    }
                    foreach (IStorePropertyBag storePropertyBag in array2)
                    {
                        string      text3       = storePropertyBag.TryGetProperty(ItemSchema.InternetMessageId) as string;
                        string      text4       = storePropertyBag.TryGetProperty(MessageItemSchema.SenderSmtpAddress) as string;
                        string      b           = storePropertyBag.TryGetProperty(ItemSchema.Subject) as string;
                        ExDateTime? exDateTime2 = storePropertyBag.TryGetProperty(ItemSchema.SentTime) as ExDateTime?;
                        VersionedId versionedId = storePropertyBag.TryGetProperty(ItemSchema.Id) as VersionedId;
                        if (!string.IsNullOrEmpty(text3) && string.Equals(text, text3, StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(text4) && string.Equals(text2, text4, StringComparison.OrdinalIgnoreCase) && string.Equals(a, b) && exDateTime2 != null && exDateTime2 == exDateTime)
                        {
                            if (item.Id == null || item.Id.ObjectId == null || versionedId == null || versionedId.ObjectId == null)
                            {
                                COWSiteMailboxMessageDedup.Tracer.TraceError((long)this.GetHashCode(), "COWSiteMailboxMessageDedup.IsDuplicateMessageBySiteMailboxDrop: some following values are unavailable: item.Id, item.Id.ObjectId, matchedId, matchedId.ObjectId");
                            }
                            else
                            {
                                COWSiteMailboxMessageDedup.Tracer.TraceDebug <StoreObjectId, StoreObjectId, string>((long)this.GetHashCode(), "COWSiteMailboxMessageDedup.IsDuplicateMessageBySiteMailboxDrop: found duplicate {0} of message {1} in site mailbox {2}.", versionedId.ObjectId, item.Id.ObjectId, session.DisplayName);
                            }
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
        public static IStorePropertyBag[] FindItemsFromInternetId(MailboxSession session, string internetMessageId, ItemQueryType itemQueryType, params PropertyDefinition[] propertyDefinitions)
        {
            Util.ThrowOnNullArgument(session, "session");
            Util.ThrowOnNullOrEmptyArgument(internetMessageId, "internetMessageId");
            Util.ThrowOnNullOrEmptyArgument(propertyDefinitions, "propertyDefinitions");
            ICollection <PropertyDefinition> properties = InternalSchema.Combine <PropertyDefinition>(propertyDefinitions, new PropertyDefinition[]
            {
                ItemSchema.InternetMessageId,
                ItemSchema.InternetMessageIdHash
            });
            int internetMessageIdHash = (int)AllItemsFolderHelper.GetHashValue(internetMessageId);

            IStorePropertyBag[] array = AllItemsFolderHelper.RunQueryOnAllItemsFolder <IStorePropertyBag[]>(session, AllItemsFolderHelper.SupportedSortBy.InternetMessageIdHash, internetMessageIdHash, null, (QueryResult queryResult) => AllItemsFolderHelper.ProcessQueryResult(queryResult, internetMessageId, internetMessageIdHash), properties, itemQueryType);
            return(array ?? Array <IStorePropertyBag> .Empty);
        }