private static ExchangePrincipal InternalGetExchangePrincipal(Participant principal, MailboxSession calendarMailboxSession) { ExchangePrincipal result; if (string.Compare(principal.RoutingType, "EX", StringComparison.OrdinalIgnoreCase) == 0) { result = ExchangePrincipal.FromLegacyDN(calendarMailboxSession.GetADSessionSettings(), principal.EmailAddress, RemotingOptions.AllowCrossSite); } else { result = ExchangePrincipal.FromProxyAddress(calendarMailboxSession.GetADSessionSettings(), principal.EmailAddress, RemotingOptions.AllowCrossSite); } return(result); }
// Token: 0x06000C14 RID: 3092 RVA: 0x0004EBBC File Offset: 0x0004CDBC private void SendExpiryOrUpdateMessage(MessageItem initiationMessage, MailboxSession session, string decisionMakerAddress, ApprovalStatus status, ExDateTime handledTime) { if (status != ApprovalStatus.Expired && status != ApprovalStatus.Approved && status != ApprovalStatus.Rejected) { throw new ArgumentException("Unexpected status"); } StoreObjectId defaultFolderId = session.GetDefaultFolderId(DefaultFolderType.Outbox); using (MessageItem messageItem = MessageItem.Create(session, defaultFolderId)) { messageItem.ClassName = "IPM.Note.Microsoft.Approval.Request.Recall"; string valueOrDefault = initiationMessage.GetValueOrDefault <string>(MessageItemSchema.ApprovalAllowedDecisionMakers); if (string.IsNullOrEmpty(valueOrDefault)) { ApprovalAssistant.GeneralTracer.TraceError((long)this.GetHashCode(), "No list of decisionmakers. No updates"); } else { string valueOrDefault2 = initiationMessage.GetValueOrDefault <string>(MessageItemSchema.ApprovalRequestMessageId); if (string.IsNullOrEmpty(valueOrDefault2)) { ApprovalAssistant.GeneralTracer.TraceError((long)this.GetHashCode(), "The approval request message id is not found."); } else { Participant valueOrDefault3 = initiationMessage.GetValueOrDefault <Participant>(MessageItemSchema.ReceivedBy); if (valueOrDefault3 == null) { ApprovalAssistant.GeneralTracer.TraceError((long)this.GetHashCode(), "Cannot get the arbitration mailbox information."); } else { messageItem.Sender = valueOrDefault3; RoutingAddress[] routingAddresses; if (!ApprovalUtils.TryGetDecisionMakers(valueOrDefault, out routingAddresses)) { ApprovalAssistant.GeneralTracer.TraceError((long)this.GetHashCode(), "initiation message has invalid decision makers."); } else { IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(true, ConsistencyMode.IgnoreInvalid, session.GetADSessionSettings(), 555, "SendExpiryOrUpdateMessage", "f:\\15.00.1497\\sources\\dev\\MailboxAssistants\\src\\assistants\\Approval\\ApprovalAssistant.cs"); string text; RoutingAddress[] array = this.FilterByServerVersionAndLookupDisplayName(routingAddresses, tenantOrRootOrgRecipientSession, decisionMakerAddress, out text); if (array.Length == 0) { ApprovalAssistant.GeneralTracer.TraceDebug((long)this.GetHashCode(), "There is no E14 or later moderator in the list."); } else { foreach (RoutingAddress address in array) { Participant participant = new Participant(string.Empty, (string)address, "SMTP"); messageItem.Recipients.Add(participant, RecipientItemType.To); } messageItem[MessageItemSchema.ApprovalDecisionTime] = handledTime; messageItem[MessageItemSchema.ApprovalRequestMessageId] = valueOrDefault2; messageItem[MessageItemSchema.IsNonDeliveryReceiptRequested] = false; messageItem[MessageItemSchema.IsDeliveryReceiptRequested] = false; byte[] conversationIndex = initiationMessage.ConversationIndex; messageItem.ConversationIndex = ConversationIndex.CreateFromParent(conversationIndex).ToByteArray(); messageItem[ItemSchema.NormalizedSubject] = initiationMessage.ConversationTopic; DsnHumanReadableWriter defaultDsnHumanReadableWriter = DsnHumanReadableWriter.DefaultDsnHumanReadableWriter; ApprovalInformation approvalInformation; if (status != ApprovalStatus.Expired) { if (string.IsNullOrEmpty(text)) { text = decisionMakerAddress; } messageItem[MessageItemSchema.ApprovalDecision] = ((status == ApprovalStatus.Approved) ? 1 : 2); messageItem[MessageItemSchema.ApprovalDecisionMaker] = text; bool?decision = new bool?(status == ApprovalStatus.Approved); approvalInformation = defaultDsnHumanReadableWriter.GetDecisionUpdateInformation(initiationMessage.Subject, text, decision, new ExDateTime?(handledTime)); } else { messageItem[MessageItemSchema.ApprovalDecision] = 0; approvalInformation = defaultDsnHumanReadableWriter.GetApprovalRequestExpiryInformation(initiationMessage.Subject); } messageItem.Subject = approvalInformation.Subject; BodyWriteConfiguration configuration = new BodyWriteConfiguration(BodyFormat.TextHtml, approvalInformation.MessageCharset.Name); using (Stream stream = messageItem.Body.OpenWriteStream(configuration)) { defaultDsnHumanReadableWriter.WriteHtmlModerationBody(stream, approvalInformation); stream.Flush(); } messageItem.SendWithoutSavingMessage(); } } } } } } }
// Token: 0x06001534 RID: 5428 RVA: 0x00079274 File Offset: 0x00077474 private void PerformDataReplication(MailboxSession mailboxSession, InvokeArgs invokeArgs) { IRecipientSession adSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(true, ConsistencyMode.IgnoreInvalid, mailboxSession.GetADSessionSettings(), 139, "PerformDataReplication", "f:\\15.00.1497\\sources\\dev\\MailboxAssistants\\src\\assistants\\MailboxAssociation\\MailboxAssociationReplicationAssistant.cs"); string operationDescription = MailboxAssociationReplicationAssistant.GetOperationDescription(invokeArgs.Parameters); GroupMailboxAccessLayer.Execute(operationDescription, adSession, mailboxSession, delegate(GroupMailboxAccessLayer accessLayer) { ADObjectId objectId = invokeArgs.StoreSession.MailboxOwner.ObjectId; MailboxAssociationReplicationAssistant.Tracer.TraceDebug <ADObjectId>((long)this.GetHashCode(), "MailboxAssociationReplicationAssistant.InvokeInternal - Replicating associations via MailboxAssistant for mailbox with ID {0}", objectId); ADUser aduser = adSession.FindADUserByObjectId(objectId); if (aduser == null) { string text = string.Format("MailboxAssociationReplicationAssistant.InvokeInternal - Couldn't find AdUser with AdObjectId {0}.", objectId); MailboxAssociationReplicationAssistant.Tracer.TraceDebug((long)this.GetHashCode(), text); LocalAssociationStore.SaveMailboxSyncStatus(mailboxSession, new ExDateTime?(ExDateTime.Now.Add(MailboxAssociationReplicationAssistant.TimeToWaitForAdReplication)), null); accessLayer.Logger.LogEvent(new SchemaBasedLogEvent <MailboxAssociationLogSchema.Error> { { MailboxAssociationLogSchema.Error.Context, "MailboxAssociationReplicationAssistant" }, { MailboxAssociationLogSchema.Error.Exception, text } }); return; } if (aduser.RecipientTypeDetails != RecipientTypeDetails.GroupMailbox && aduser.RecipientTypeDetails != RecipientTypeDetails.UserMailbox) { MailboxAssociationReplicationAssistant.Tracer.TraceDebug <Guid, string, string>((long)this.GetHashCode(), "Skipping mailbox with guid {0} and display name {1} since this is a {2} and not a GroupMailbox or UserMailbox", mailboxSession.MailboxGuid, mailboxSession.MailboxOwner.MailboxInfo.DisplayName, mailboxSession.MailboxOwner.RecipientTypeDetails.ToString()); return; } MailboxAssociationReplicationAssistant.Tracer.TraceDebug <string, string>((long)this.GetHashCode(), "MailboxAssociationReplicationAssistant.InvokeInternal - Master Mailbox: ExternalID {0}, LegDN {1}", aduser.ExternalDirectoryObjectId, aduser.LegacyExchangeDN); ICollection <IMailboxLocator> associationsToReplicate = MailboxAssociationReplicationAssistant.GetAssociationsToReplicate(invokeArgs.Parameters, adSession); if (associationsToReplicate == null) { MailboxAssociationReplicationAssistant.Tracer.TraceDebug((long)this.GetHashCode(), "MailboxAssociationReplicationAssistant.InvokeInternal - No locators provided in RunNow parameters, replicating all out-of-sync associations"); this.ReplicateOutOfSyncAssociations(mailboxSession, aduser, adSession, accessLayer); return; } MailboxAssociationReplicationAssistant.Tracer.TraceDebug((long)this.GetHashCode(), "MailboxAssociationReplicationAssistant.InvokeInternal - Found slave locators in RunNow parameters, replicating only provided associations"); this.ReplicateAssociations(aduser, adSession, associationsToReplicate, accessLayer); }); }
// Token: 0x06000038 RID: 56 RVA: 0x00003BFC File Offset: 0x00001DFC private void SendModeratorExpiryNotification(MessageItem messageItem, ApprovalInformation.ApprovalNotificationType notificationType) { ModeratedDLApplication.diag.TraceDebug((long)this.GetHashCode(), "Entering SendModeratorExpiryNotification"); if (!this.ShouldSendNotification(messageItem)) { return; } string valueOrDefault = messageItem.GetValueOrDefault <string>(MessageItemSchema.ApprovalAllowedDecisionMakers); RoutingAddress[] collection; if (!ApprovalUtils.TryGetDecisionMakers(valueOrDefault, out collection)) { return; } MailboxSession mailboxSession = (MailboxSession)messageItem.Session; messageItem.Load(ModeratedDLApplication.NotificationPropertiesFromInitMessage); ICollection <string> moderatedRecipients = this.GetModeratedRecipients(messageItem, false); string valueOrDefault2 = messageItem.GetValueOrDefault <string>(ItemSchema.InternetReferences, string.Empty); int value = messageItem.GetValueAsNullable <int>(StoreObjectSchema.RetentionPeriod) ?? 2; Dictionary <CultureInfo, List <RoutingAddress> > dictionary = null; IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(false, ConsistencyMode.FullyConsistent, mailboxSession.GetADSessionSettings(), 587, "SendModeratorExpiryNotification", "f:\\15.00.1497\\sources\\dev\\Approval\\src\\Applications\\ModeratedDLApplication\\ModeratedDLApplication.cs"); DsnHumanReadableWriter defaultDsnHumanReadableWriter = DsnHumanReadableWriter.DefaultDsnHumanReadableWriter; StoreObjectId defaultFolderId = mailboxSession.GetDefaultFolderId(DefaultFolderType.Outbox); if (ClientCultures.IsCultureSupportedForDsn(CultureInfo.CurrentCulture)) { this.defaultFallBackCulture = CultureInfo.CurrentCulture; } else { this.defaultFallBackCulture = CultureInfo.GetCultureInfo("en-US"); } if (ApprovalProcessor.TryGetCulturesForDecisionMakers(new List <RoutingAddress>(collection), tenantOrRootOrgRecipientSession, this.defaultFallBackCulture, out dictionary)) { foreach (CultureInfo cultureInfo in dictionary.Keys) { IList <RoutingAddress> list = dictionary[cultureInfo]; using (MessageItem messageItem2 = MessageItem.Create(mailboxSession, defaultFolderId)) { ApprovalInformation approvalInformation = null; string text; this.AttachOriginalMessageToNotification(messageItem, messageItem2, out text); if (string.IsNullOrEmpty(text)) { RoutingAddress routingAddress; if (!this.TryGetOriginalSender(messageItem, out routingAddress)) { break; } text = routingAddress.ToString(); } approvalInformation = defaultDsnHumanReadableWriter.GetMessageInModerationModeratorExpiredInformation(notificationType, messageItem.Subject, moderatedRecipients, text, new int?(value), cultureInfo.Name, this.defaultFallBackCulture); messageItem2.Subject = approvalInformation.Subject; BodyWriteConfiguration configuration = new BodyWriteConfiguration(BodyFormat.TextHtml, approvalInformation.MessageCharset.Name); using (Stream stream = messageItem2.Body.OpenWriteStream(configuration)) { defaultDsnHumanReadableWriter.WriteHtmlModerationBody(stream, approvalInformation); } this.StampCommonNotificationProperties(messageItem2, messageItem, list, valueOrDefault2, approvalInformation.Culture); messageItem2.ClassName = "IPM.Note.Microsoft.Approval.Reply.Reject"; messageItem2.SendWithoutSavingMessage(); ModeratedDLApplication.diag.TraceDebug <int, string>((long)this.GetHashCode(), "Expiry Notification sent for {0} decision makers, original message id '{1}'", list.Count, valueOrDefault2); } } } }
// Token: 0x0600167A RID: 5754 RVA: 0x0007EF34 File Offset: 0x0007D134 private void PerformDLExpansionOnItemRecipients(MailboxSession itemStore, MessageItem messageItem, ref bool isExpectedException) { Exception ex = null; try { GroupExpansionRecipients groupExpansionRecipients = null; if (this.MessageAlreadyHasRecipientsExpanded(messageItem, MessageItemSchema.GroupExpansionRecipients, out groupExpansionRecipients)) { RecipientDLExpansionEventBasedAssistant.Tracer.TraceDebug <StoreObjectId, string>((long)this.GetHashCode(), "Message with id: {0} and subject: '{1}' already have group recipients expanded.", messageItem.StoreObjectId, messageItem.Subject); StorageGlobals.EventLogger.LogEvent(StorageEventLogConstants.Tuple_RecipientDLExpansionMessageAlreadyProcessed, null, new object[] { messageItem.StoreObjectId, groupExpansionRecipients }); return; } IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(true, ConsistencyMode.IgnoreInvalid, itemStore.GetADSessionSettings(), 314, "PerformDLExpansionOnItemRecipients", "f:\\15.00.1497\\sources\\dev\\MailboxAssistants\\src\\assistants\\Compliance\\RecipientDLExpansionEventBasedAssistant.cs"); List <ADRecipient> list = new List <ADRecipient>(); List <ADRecipient> list2 = new List <ADRecipient>(); List <ADRecipient> list3 = new List <ADRecipient>(); foreach (Recipient recipient in messageItem.Recipients) { bool?flag = recipient.IsDistributionList(); if (flag != null && flag.Value) { if (recipient.RecipientItemType == RecipientItemType.To) { ADRecipient adrecipient = null; if (recipient.Participant.TryGetADRecipient(tenantOrRootOrgRecipientSession, out adrecipient) && adrecipient != null && !list.Contains(adrecipient)) { list.Add(adrecipient); } } else if (recipient.RecipientItemType == RecipientItemType.Cc) { ADRecipient adrecipient2 = null; if (recipient.Participant.TryGetADRecipient(tenantOrRootOrgRecipientSession, out adrecipient2) && adrecipient2 != null && !list2.Contains(adrecipient2)) { list2.Add(adrecipient2); } } else if (recipient.RecipientItemType == RecipientItemType.Bcc) { ADRecipient adrecipient3 = null; if (recipient.Participant.TryGetADRecipient(tenantOrRootOrgRecipientSession, out adrecipient3) && adrecipient3 != null && !list3.Contains(adrecipient3)) { list3.Add(adrecipient3); } } } } if (list.Count > 0 || list2.Count > 0 || list3.Count > 0) { RecipientDLExpansionPerfmon.TotalDLExpansionMessages.Increment(); RecipientDLExpansionPerfmon.TotalRecipientDLsInMessage.IncrementBy((long)(list.Count + list2.Count + list3.Count)); using (AverageTimeCounter averageTimeCounter = new AverageTimeCounter(RecipientDLExpansionPerfmon.AverageMessageDLExpansionProcessing, RecipientDLExpansionPerfmon.AverageMessageDLExpansionProcessingBase, true)) { try { GroupExpansionRecipients groupExpansionRecipients2 = new GroupExpansionRecipients(); DistributionGroupExpansionError distributionGroupExpansionError = DistributionGroupExpansionError.NoError; distributionGroupExpansionError |= this.ExpandGroupMemberRecipients(messageItem, list, RecipientItemType.To, groupExpansionRecipients2); distributionGroupExpansionError |= this.ExpandGroupMemberRecipients(messageItem, list2, RecipientItemType.Cc, groupExpansionRecipients2); distributionGroupExpansionError |= this.ExpandGroupMemberRecipients(messageItem, list3, RecipientItemType.Bcc, groupExpansionRecipients2); int num = 0; while (num++ <= 1) { try { groupExpansionRecipients2.SaveToStore(messageItem, MessageItemSchema.GroupExpansionRecipients); if (distributionGroupExpansionError != DistributionGroupExpansionError.NoError) { messageItem[MessageItemSchema.GroupExpansionError] = distributionGroupExpansionError; } SaveMode saveMode = SaveMode.NoConflictResolution; messageItem.Save(saveMode); break; } catch (TransientException ex2) { RecipientDLExpansionEventBasedAssistant.Tracer.TraceError <TransientException>((long)this.GetHashCode(), "Got transient exception when trying to update the message: \r\n{0}", ex2); if (num > 1) { RecipientDLExpansionEventBasedAssistant.Tracer.TraceDebug <int>((long)this.GetHashCode(), "It still failed after retry for {0} times, so give up.", 1); throw; } if (ex2 is SaveConflictException) { RecipientDLExpansionEventBasedAssistant.Tracer.TraceDebug((long)this.GetHashCode(), "Got SaveConflictException, will reload the item and retry immediately."); StoreId id = messageItem.Id; MessageItem messageItem2 = Item.BindAsMessage(itemStore, id, RecipientDLExpansionEventBasedAssistant.ItemProperties); messageItem.Dispose(); messageItem = messageItem2; } else { RecipientDLExpansionEventBasedAssistant.Tracer.TraceDebug <int>((long)this.GetHashCode(), "Wait for {0} milliseconds before retry again.", 30000); Thread.Sleep(30000); } } } } finally { averageTimeCounter.Stop(); } goto IL_382; } } RecipientDLExpansionEventBasedAssistant.Tracer.TraceWarning <StoreObjectId, string>((long)this.GetHashCode(), "Message with id: {0} and subject: '{1}' does not have any DG recipients.", messageItem.StoreObjectId, messageItem.Subject); StorageGlobals.EventLogger.LogEvent(StorageEventLogConstants.Tuple_RecipientDLExpansionMessageNoDLRecipients, null, new object[] { messageItem.StoreObjectId }); IL_382 :; } catch (AccessDeniedException ex3) { ex = ex3; isExpectedException = true; } catch (ObjectNotFoundException ex4) { ex = ex4; isExpectedException = true; } catch (RecoverableItemsAccessDeniedException ex5) { isExpectedException = true; RecipientDLExpansionEventBasedAssistant.Tracer.TraceWarning((long)this.GetHashCode(), "Can't save DL expansion list to message with id: {0} and subject: '{1}' in mailbox: {2}, tenant: {3} because update item in Dumpster is not allowed. Exception: \r\n{4}", new object[] { messageItem.StoreObjectId, messageItem.Subject, itemStore.MailboxGuid, itemStore.OrganizationId, ex5 }); StorageGlobals.EventLogger.LogEvent(StorageEventLogConstants.Tuple_RecipientDLExpansionUpdateItemInDumpster, null, new object[] { messageItem.StoreObjectId, messageItem.Subject, itemStore.MailboxGuid, itemStore.OrganizationId, ex5 }); } if (ex != null) { RecipientDLExpansionEventBasedAssistant.Tracer.TraceWarning((long)this.GetHashCode(), "Can't process message with id: {0} and subject: '{1}' in mailbox: {2}, tenant: {3} because it may no longer exist. Exception: \r\n{4}", new object[] { messageItem.StoreObjectId, messageItem.Subject, itemStore.MailboxGuid, itemStore.OrganizationId, ex }); StorageGlobals.EventLogger.LogEvent(StorageEventLogConstants.Tuple_RecipientDLExpansionMessageNoLongerExist, null, new object[] { messageItem.StoreObjectId, itemStore.MailboxGuid, itemStore.OrganizationId, ex }); } }
// Token: 0x060009E4 RID: 2532 RVA: 0x00041508 File Offset: 0x0003F708 public void HandleEvent(MapiEvent mapiEvent, MailboxSession itemStore, StoreObject item) { if (ObjectType.MAPI_MESSAGE == mapiEvent.ItemType && item == null) { ExTraceGlobals.UserSettingsTracer.TraceDebug <string>((long)this.GetHashCode(), "Event is MAPI_MESSAGE but item is null, message class is {0}", mapiEvent.ObjectClass); return; } if (!itemStore.Capabilities.CanHaveUserConfigurationManager) { ExTraceGlobals.UserSettingsTracer.TraceDebug <string>((long)this.GetHashCode(), "Mailbox sesstion does not have UserConfigurationManager capability. Possibly an alternate mailbox, {0}.", itemStore.MailboxOwnerLegacyDN); return; } if (this.IsMailboxDeletedOrDisconnected(mapiEvent)) { ExTraceGlobals.UserSettingsTracer.TraceDebug <string, Guid>((long)this.GetHashCode(), "Processing Disabling event for mailbox {0} on database {1}", itemStore.MailboxOwnerLegacyDN, itemStore.MdbGuid); UserSettings settings = new UserSettings(itemStore); SystemMailbox systemMailbox = this.GetSystemMailbox(); if (systemMailbox != null) { NotificationFactories.Instance.UpdateSettingUnderSystemMailbox(settings, systemMailbox); } SettingsChangeListener.Instance.RaiseSettingsChangedEvent(settings, new InfoFromUserMailboxSession(itemStore)); return; } if (this.IsMailboxCreatedOrConnected(mapiEvent)) { ExTraceGlobals.UserSettingsTracer.TraceDebug <string, Guid>((long)this.GetHashCode(), "Processing Enabling event for mailbox {0} on database {1}", itemStore.MailboxOwnerLegacyDN, itemStore.MdbGuid); using (VersionedXmlDataProvider versionedXmlDataProvider = new VersionedXmlDataProvider(itemStore)) { TextMessagingAccount account = (TextMessagingAccount)versionedXmlDataProvider.Read <TextMessagingAccount>(itemStore.MailboxOwner.ObjectId); IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(false, ConsistencyMode.IgnoreInvalid, itemStore.GetADSessionSettings(), 194, "HandleEvent", "f:\\15.00.1497\\sources\\dev\\MailboxAssistants\\src\\assistants\\CalendarNotification\\SettingsChangeProcessor.cs"); ADRecipient adrecipient = tenantOrRootOrgRecipientSession.Read(itemStore.MailboxOwner.ObjectId); if (adrecipient != null) { TextMessagingHelper.UpdateAndSaveTextMessgaingStateOnAdUser(account, adrecipient, tenantOrRootOrgRecipientSession); } } } this.HandleSettingsEvent(itemStore); }