internal MailTipsPerRequesterPermissionMap(ClientContext clientContext, int recipientCount, Trace tracer, int traceId) { this.ExternalClientContext = (clientContext as ExternalClientContext); if (this.ExternalClientContext != null) { this.permissionMap = new Dictionary <OrganizationId, MailTipsPermission>(recipientCount); } this.tracer = tracer; this.traceId = traceId; }
internal void ParseUserOofSettings(UserOofSettings oofSettings, MailTips mailTips, int traceId) { if (oofSettings.OofState == OofState.Disabled) { MailTipsLocalQuery.GetMailTipsTracer.TraceDebug <object, EmailAddress>((long)traceId, "{0} / {1}: OutOfOffice is disabled", TraceContext.Get(), mailTips.EmailAddress); mailTips.OutOfOfficeMessage = string.Empty; return; } DateTime utcNow = DateTime.UtcNow; if (oofSettings.OofState == OofState.Scheduled && (utcNow > oofSettings.EndTime || utcNow < oofSettings.StartTime)) { MailTipsLocalQuery.GetMailTipsTracer.TraceDebug <object, EmailAddress>((long)traceId, "{0} / {1}: OutOfOffice is Scheduled, but we're outside the scheduled interval", TraceContext.Get(), mailTips.EmailAddress); mailTips.OutOfOfficeMessage = string.Empty; return; } ReplyBody replyBody; if (MailTipsAccessLevel.All != mailTips.Permission.AccessLevel) { MailTipsLocalQuery.GetMailTipsTracer.TraceDebug <object, EmailAddress>((long)traceId, "{0} / {1}: MailTipsAccessLevel is not All, retrieving external auto reply.", TraceContext.Get(), mailTips.EmailAddress); replyBody = oofSettings.ExternalReply; } else if (this.clientContext is InternalClientContext) { MailTipsLocalQuery.GetMailTipsTracer.TraceDebug <object, EmailAddress>((long)traceId, "{0} / {1}: InternalClientContext detected, retrieving internal auto reply.", TraceContext.Get(), mailTips.EmailAddress); replyBody = oofSettings.InternalReply; } else { ExternalClientContext externalClientContext = (ExternalClientContext)this.clientContext; if (mailTips.Configuration.Domains.IsInternal(externalClientContext.EmailAddress.Domain)) { MailTipsLocalQuery.GetMailTipsTracer.TraceDebug((long)traceId, "{0} / {1}: ExternalClientContext detected and caller domain {2} is internal to recipient organization {3}, retrieving internal auto reply.", new object[] { TraceContext.Get(), mailTips.EmailAddress, externalClientContext.EmailAddress.Domain, mailTips.Configuration.OrganizationConfiguration.Configuration.OrganizationId }); replyBody = oofSettings.InternalReply; } else { MailTipsLocalQuery.GetMailTipsTracer.TraceDebug((long)traceId, "{0} / {1}: ExternalClientContext detected and caller domain {2} is not internal to recipient organization {3}, retrieving external auto reply.", new object[] { TraceContext.Get(), mailTips.EmailAddress, externalClientContext.EmailAddress.Domain, mailTips.Configuration.OrganizationConfiguration.Configuration.OrganizationId }); replyBody = oofSettings.ExternalReply; } } if (replyBody == null || replyBody.RawMessage == null || RuleGenerator.IsEmptyString(replyBody.RawMessage)) { MailTipsLocalQuery.GetMailTipsTracer.TraceDebug <object, EmailAddress>((long)traceId, "{0} / {1}: OutOfOfficeMessage is null or empty", TraceContext.Get(), mailTips.EmailAddress); mailTips.OutOfOfficeMessage = string.Empty; return; } MailTipsLocalQuery.GetMailTipsTracer.TraceDebug <object, EmailAddress, string>((long)traceId, "{0} / {1}: OutOfOffice message has been retrieved: {2}", TraceContext.Get(), mailTips.EmailAddress, replyBody.Message); string outOfOfficeMessage = MailTipsUtility.MakeSafeHtml(traceId, replyBody.Message); mailTips.OutOfOfficeMessage = outOfOfficeMessage; mailTips.OutOfOfficeMessageLanguage = replyBody.LanguageTag; if (oofSettings.OofState == OofState.Scheduled) { mailTips.OutOfOfficeDuration = oofSettings.Duration; } }