Ejemplo n.º 1
0
        internal static SmtpAddress Lookup(RecipientIdParameter recipId, IRecipientSession recipSession, OrganizationId orgId, bool getRecipientType, out Microsoft.Exchange.Data.Directory.Recipient.RecipientType?recipientType)
        {
            recipientType = null;
            bool flag = SmtpAddress.IsValidSmtpAddress(recipId.RawIdentity);

            if (!getRecipientType && flag)
            {
                return(SmtpAddress.Parse(recipId.RawIdentity));
            }
            if (flag)
            {
                SmtpAddress smtpAddress = SmtpAddress.Parse(recipId.RawIdentity);
                ADRecipient adrecipientBySmtpAddress = JournalRuleObject.GetADRecipientBySmtpAddress(smtpAddress);
                if (adrecipientBySmtpAddress != null)
                {
                    recipientType = new Microsoft.Exchange.Data.Directory.Recipient.RecipientType?(adrecipientBySmtpAddress.RecipientType);
                }
                return(smtpAddress);
            }
            IEnumerable <ADRecipient> objects = recipId.GetObjects <ADRecipient>((null == orgId) ? null : orgId.OrganizationalUnit, recipSession ?? DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(ConsistencyMode.IgnoreInvalid, orgId.ToADSessionSettings(), 429, "Lookup", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\SystemConfigurationTasks\\JournalRule\\JournalRuleObject.cs"));
            ADRecipient adrecipient           = null;

            using (IEnumerator <ADRecipient> enumerator = objects.GetEnumerator())
            {
                if (!enumerator.MoveNext())
                {
                    MimeRecipient mimeRecipient = null;
                    try
                    {
                        mimeRecipient = MimeRecipient.Parse(recipId.RawIdentity, AddressParserFlags.IgnoreComments | AddressParserFlags.AllowSquareBrackets);
                    }
                    catch (MimeException)
                    {
                    }
                    if (mimeRecipient == null || string.IsNullOrEmpty(mimeRecipient.Email) || !SmtpAddress.IsValidSmtpAddress(mimeRecipient.Email))
                    {
                        throw new RecipientInvalidException(Strings.NoRecipients);
                    }
                    return(new SmtpAddress(mimeRecipient.Email));
                }
                else
                {
                    adrecipient = enumerator.Current;
                    if (enumerator.MoveNext())
                    {
                        throw new RecipientInvalidException(Strings.MoreThanOneRecipient);
                    }
                }
            }
            if (adrecipient is IADOrgPerson && adrecipient.PrimarySmtpAddress.Equals(SmtpAddress.Empty))
            {
                throw new RecipientInvalidException(Strings.NoSmtpAddress);
            }
            recipientType = new Microsoft.Exchange.Data.Directory.Recipient.RecipientType?(adrecipient.RecipientType);
            return(adrecipient.PrimarySmtpAddress);
        }
Ejemplo n.º 2
0
        internal void WriteMailBox(string displayName, string address)
        {
            if (this.hasAllHeaders)
            {
                return;
            }
            if (address == null)
            {
                address = string.Empty;
            }
            AddressHeader addressHeader = (AddressHeader)this.currentHeader;
            MimeRecipient newChild      = new MimeRecipient(displayName, address);

            addressHeader.AppendChild(newChild);
        }
Ejemplo n.º 3
0
        public static ADRecipientOrAddress[] ResolveRecipients(IList <RecipientIdParameter> recipientIDs, DataAccessHelper.GetDataObjectDelegate getRecipientObject, IRecipientSession recipientSession, ManageInboxRule.ThrowTerminatingErrorDelegate errorHandler)
        {
            if (recipientIDs == null || recipientIDs.Count == 0)
            {
                return(null);
            }
            ADRecipientOrAddress[] array = new ADRecipientOrAddress[recipientIDs.Count];
            int num = 0;

            foreach (RecipientIdParameter recipientIdParameter in recipientIDs)
            {
                try
                {
                    recipientIdParameter.SearchWithDisplayName = false;
                    ADRecipient adEntry = (ADRecipient)getRecipientObject(recipientIdParameter, recipientSession, null, null, new LocalizedString?(Strings.ErrorRecipientNotFound(recipientIdParameter.ToString())), new LocalizedString?(Strings.ErrorRecipientNotUnique(recipientIdParameter.ToString())));
                    array[num++] = new ADRecipientOrAddress(new Participant(adEntry));
                }
                catch (ManagementObjectNotFoundException)
                {
                    MimeRecipient mimeRecipient = null;
                    try
                    {
                        mimeRecipient = MimeRecipient.Parse(recipientIdParameter.RawIdentity, AddressParserFlags.IgnoreComments | AddressParserFlags.AllowSquareBrackets);
                    }
                    catch (MimeException)
                    {
                    }
                    if (mimeRecipient == null || string.IsNullOrEmpty(mimeRecipient.Email) || !SmtpAddress.IsValidSmtpAddress(mimeRecipient.Email))
                    {
                        errorHandler(new LocalizedException(Strings.ErrorInboxRuleUserInvalid(recipientIdParameter.ToString())), ErrorCategory.InvalidArgument, null);
                    }
                    string text = string.Empty;
                    try
                    {
                        text = mimeRecipient.DisplayName;
                    }
                    catch (MimeException)
                    {
                    }
                    if (string.IsNullOrEmpty(text))
                    {
                        text = mimeRecipient.Email;
                    }
                    array[num++] = new ADRecipientOrAddress(new Participant(text, mimeRecipient.Email, "smtp"));
                }
            }
            return(array);
        }
Ejemplo n.º 4
0
        private List <MimeRecipient> GetBccRecipients(AddressHeader bccHeader)
        {
            List <MimeRecipient> list = new List <MimeRecipient>();

            if (bccHeader != null)
            {
                foreach (AddressItem addressItem in bccHeader)
                {
                    MimeRecipient item = addressItem as MimeRecipient;
                    if (!list.Contains(item))
                    {
                        list.Add(item);
                    }
                }
            }
            return(list);
        }
Ejemplo n.º 5
0
 private void WriteRecipient(MimeRecipient recipient)
 {
     if (lastHeader == null || !(lastHeader is AddressHeader))
         throw new System.InvalidOperationException(Resources.Strings.CannotWriteRecipientsHere);
     MimeNode mimeNode;
     switch (state) {
         case MimeWriteState.Complete:
         case MimeWriteState.StartPart:
         case MimeWriteState.PartContent:
         case MimeWriteState.EndPart:
             throw new System.InvalidOperationException(Resources.Strings.CannotWriteRecipientsHere);
         case MimeWriteState.GroupRecipients:
             mimeNode = lastHeader.LastChild;
             break;
         default:
             state = MimeWriteState.Recipients;
             mimeNode = lastHeader;
             break;
     }
     mimeNode.InternalAppendChild(recipient);
 }
Ejemplo n.º 6
0
 internal EmailRecipient(MimeRecipient recipient)
 {
     this.mimeRecipient = recipient;
 }
Ejemplo n.º 7
0
        internal static int CopyRecipientsTo(SubmissionItemBase submissionItem, TransportMailItem mailItem, SubmissionRecipientHandler recipientHandler, ref List <string> unresolvableRecipients, ref List <string> notResponsibleRecipientsList, bool useParticipantSmtpEmailAddressIfNecessary, out List <string> participantSmtpEmailAddressBeneficiaries)
        {
            participantSmtpEmailAddressBeneficiaries = new List <string>();
            TraceHelper.StoreDriverTracer.TracePass <long>(TraceHelper.MessageProbeActivityId, 0L, "SubmissionItemUtils.CopyRecipientsTo: Copy recipients to mailitem {0}", mailItem.RecordId);
            bool resubmittedMessage = submissionItem.ResubmittedMessage;

            mailItem.ExtendedProperties.SetValue <bool>("Microsoft.Exchange.Transport.ResentMapiMessage", resubmittedMessage);
            List <MimeRecipient> list  = new List <MimeRecipient>();
            List <string>        list2 = null;
            List <string>        list3 = null;
            int num = 0;

            TraceHelper.StoreDriverTracer.TracePass <string>(TraceHelper.MessageProbeActivityId, 0L, "Copying recipients for {0} message", resubmittedMessage ? "resubmitted" : "regular");
            foreach (Recipient recipient in submissionItem.Recipients)
            {
                string emailAddress = recipient.Participant.EmailAddress;
                TraceHelper.StoreDriverTracer.TracePass <string>(TraceHelper.MessageProbeActivityId, 0L, "Processing recipient: {0}", emailAddress);
                int?           num2 = null;
                RoutingAddress arg;
                bool           flag;
                if (!SubmissionItemUtils.GetP2RecipientType(resubmittedMessage, recipient, out num2))
                {
                    TraceHelper.StoreDriverTracer.TracePass <int>(TraceHelper.MessageProbeActivityId, 0L, "SubmissionItemUtils.CopyRecipientsTo: Saving recipient type {0} of P2 recipient on resubmitted message", num2.Value);
                    SubmissionItemUtils.SaveP2Recipient(mailItem, emailAddress, num2.Value, ref list2, ref list3);
                }
                else if (!SubmissionItemBase.GetValueTypePropValue <bool>(recipient, ItemSchema.Responsibility).GetValueOrDefault())
                {
                    TraceHelper.StoreDriverTracer.TracePass <Participant>(TraceHelper.MessageProbeActivityId, 0L, "SubmissionItemUtils.CopyRecipientsTo: Skip recipient {0} since PR_RESPONSIBILITY is not true", recipient.Participant);
                    if (notResponsibleRecipientsList == null)
                    {
                        notResponsibleRecipientsList = new List <string>(1);
                    }
                    string item = SubmissionItemUtils.BuildParticipantString(recipient.Participant);
                    notResponsibleRecipientsList.Add(item);
                }
                else if (!SubmissionItemUtils.TryGetRoutingAddressFromParticipant(mailItem.ADRecipientCache, recipient.Participant, "Recipient", out arg, out flag, useParticipantSmtpEmailAddressIfNecessary))
                {
                    if (recipientHandler != null)
                    {
                        recipientHandler(num2, recipient, mailItem, null);
                    }
                    if (unresolvableRecipients == null)
                    {
                        unresolvableRecipients = new List <string>(1);
                    }
                    string text = SubmissionItemUtils.BuildParticipantString(recipient.Participant);
                    unresolvableRecipients.Add(text);
                    TraceHelper.StoreDriverTracer.TraceFail <string>(TraceHelper.MessageProbeActivityId, 0L, "SubmissionItemUtils.CopyRecipientsTo: Invalid recipient {0}", text);
                }
                else
                {
                    TraceHelper.StoreDriverTracer.TracePass <RoutingAddress, int?>(TraceHelper.MessageProbeActivityId, 0L, "Added recipient: {0}, Type: {1}", arg, num2);
                    string text2 = arg.ToString();
                    if (flag)
                    {
                        participantSmtpEmailAddressBeneficiaries.Add(text2);
                    }
                    MailRecipient mailRecipient = mailItem.Recipients.Add(text2);
                    num++;
                    if (recipientHandler != null)
                    {
                        recipientHandler(num2, recipient, mailItem, mailRecipient);
                    }
                    string refTypePropValue = SubmissionItemBase.GetRefTypePropValue <string>(recipient, StoreObjectSchema.DisplayName);
                    SubmissionItemUtils.CopyRecipientPropsFromXSOToTransport(submissionItem, recipient, mailRecipient, num2, refTypePropValue);
                    if (num2 != null && num2 == 3)
                    {
                        MimeRecipient item2 = new MimeRecipient(refTypePropValue, text2);
                        list.Add(item2);
                    }
                }
            }
            SubmissionItemUtils.AddExchangeOrganizationBccHeader(list, mailItem);
            if (list2 != null)
            {
                mailItem.ExtendedProperties.SetValue <List <string> >("Microsoft.Exchange.Transport.ResentMapiP2ToRecipients", list2);
            }
            if (list3 != null)
            {
                mailItem.ExtendedProperties.SetValue <List <string> >("Microsoft.Exchange.Transport.ResentMapiP2CcRecipients", list3);
            }
            return(num);
        }