internal IList <RecipientData> Query(string recipientSmtpAddress, ADObjectId recipientAdObjectId) { if (!string.IsNullOrEmpty(recipientSmtpAddress) && SmtpAddress.IsValidSmtpAddress(recipientSmtpAddress)) { RecipientQueryResults recipientQueryResults = base.Query(new EmailAddress[] { new EmailAddress(string.Empty, recipientSmtpAddress) }); if (recipientQueryResults != null && recipientQueryResults.Count > 0 && recipientQueryResults[0].Exception == null && recipientQueryResults[0].ProviderError == null) { return(recipientQueryResults); } } if (recipientAdObjectId != null) { ADRecipient adrecipient = base.ADRecipientSession.Read(recipientAdObjectId); if (adrecipient != null) { EmailAddress emailAddress = RecipientQuery.CreateEmailAddressFromADRecipient(adrecipient); return(new RecipientData[] { RecipientData.Create(emailAddress, adrecipient, UserPhotoRecipientQuery.RecipientProperties) }); } } this.tracer.TraceDebug <string, ADObjectId>((long)this.GetHashCode(), "Target user not found in directory. Search params were SMTP-address='{0}' OR ADObjectId='{1}'", recipientSmtpAddress, recipientAdObjectId); return(Array <RecipientData> .Empty); }
private IEnumerable <RecipientData> ProcessResults(EmailAddress[] emailAddressArray, int startIndex, int size, Result <ADRawEntry>[] resultsArray, List <int> indexList) { for (int index = 0; index < size; index++) { int resultIndex = indexList.IndexOf(index); if (-1 == resultIndex) { EmailAddress invalidAddress = emailAddressArray[startIndex + index]; yield return(RecipientData.Create(emailAddressArray[startIndex + index], new InvalidSmtpAddressException(Strings.descInvalidSmtpAddress((invalidAddress == null) ? "null" : invalidAddress.ToString())))); } else { Result <ADRawEntry> result = resultsArray[resultIndex]; if (result.Error == null) { yield return(RecipientData.Create(emailAddressArray[startIndex + index], result.Data, this.propertyDefinitionArray)); } else { yield return(RecipientData.Create(emailAddressArray[startIndex + index], result.Error)); } } } yield break; }
internal List <RecipientData> ExpandDistributionGroup(RecipientData recipientData, DateTime queryPrepareDeadline, out bool groupCapped) { List <RecipientData> list = new List <RecipientData>(Configuration.MaximumGroupMemberCount); groupCapped = false; int num = 0; Queue <RecipientData> queue = new Queue <RecipientData>(Configuration.MaximumGroupMemberCount); HashSet <Guid> hashSet = new HashSet <Guid>(Configuration.MaximumGroupMemberCount); queue.Enqueue(recipientData); hashSet.Add(recipientData.Guid); while (queue.Count > 0 && !groupCapped) { RecipientData recipientData2 = queue.Dequeue(); QueryFilter filter = new ComparisonFilter(ComparisonOperator.Equal, ADRecipientSchema.MemberOfGroup, recipientData2.Id); ADPagedReader <ADRecipient> adpagedReader = base.ADRecipientSession.FindPaged(null, QueryScope.SubTree, filter, null, Configuration.MaximumGroupMemberCount); ExTraceGlobals.DistributionListHandlingTracer.TraceDebug <object, SmtpAddress, int>((long)this.GetHashCode(), "{0}: Expanding group {1}, which has {2} members.", TraceContext.Get(), recipientData.PrimarySmtpAddress, recipientData.DistributionGroupMembersCount); foreach (ADRecipient adrecipient in adpagedReader) { if (DateTime.UtcNow > queryPrepareDeadline) { groupCapped = true; break; } if (!hashSet.Contains(adrecipient.Guid)) { hashSet.Add(adrecipient.Guid); if (adrecipient is ADUser || adrecipient is ADContact) { if (list.Count >= Configuration.MaximumGroupMemberCount) { groupCapped = true; break; } EmailAddress emailAddress = RecipientQuery.CreateEmailAddressFromADRecipient(adrecipient); list.Add(RecipientData.Create(emailAddress, adrecipient, base.PropertyDefinitionArray)); } else if (adrecipient is ADGroup) { EmailAddress emailAddress2 = RecipientQuery.CreateEmailAddressFromADRecipient(adrecipient); ADGroup configurableObject = (ADGroup)adrecipient; queue.Enqueue(RecipientData.Create(emailAddress2, configurableObject, base.PropertyDefinitionArray)); } else { ExTraceGlobals.DistributionListHandlingTracer.TraceDebug <object, ADRecipient>((long)this.GetHashCode(), "{0}: Group member {1} is not a ADUser, ADContact or ADGroup. This member is not being processed.", TraceContext.Get(), adrecipient); } } else { ExTraceGlobals.DistributionListHandlingTracer.TraceDebug <object, ADRecipient>((long)this.GetHashCode(), "{0}: Group member {1} has been found to be a duplicate and not being processed.", TraceContext.Get(), adrecipient); num++; } } } return(list); }
private IEnumerable <RecipientData> HandleErrorFromRecipientLookup(Exception e, EmailAddress[] emailAddressArray, int start, int length, uint locationIdentifier) { LocalizedException exception; if (e is LocalizedException) { exception = (LocalizedException)e; ErrorHandler.SetErrorCodeIfNecessary(exception, ErrorConstants.FreeBusyGenerationFailed); } else if (e is ADTimelimitExceededException) { exception = new TimeoutExpiredException("LookupRecipients:ADTimeLimit"); } else { exception = new MailRecipientNotFoundException(e, locationIdentifier); } ExTraceGlobals.RequestRoutingTracer.TraceError <object, LocalizedException>((long)this.GetHashCode(), "{0}: Failed to lookup recipients in AD. Exception {1}", TraceContext.Get(), exception); for (int i = 0; i < length; i++) { yield return(RecipientData.Create(emailAddressArray[start + i], exception)); } yield break; }