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); }