private TransportMailItem CreateMailItem()
        {
            TransportMailItem transportMailItem = TransportMailItem.NewSideEffectMailItem(this.context.MbxTransportMailItem, this.context.RecipientCache.OrganizationId, LatencyComponent.MailboxRules, MailDirectionality.Originating, this.context.MbxTransportMailItem.ExternalOrganizationId);

            base.CopyContentTo(transportMailItem);
            base.DecorateMessage(transportMailItem);
            base.ApplySecurityAttributesTo(transportMailItem);
            transportMailItem.PrioritizationReason = this.context.PrioritizationReason;
            transportMailItem.Priority             = this.context.Priority;
            ClassificationUtils.PromoteStoreClassifications(transportMailItem.RootPart.Headers);
            SubmissionItemUtils.PatchQuarantineSender(transportMailItem, base.QuarantineOriginalSender);
            HeaderList headers = transportMailItem.RootPart.Headers;

            if (headers.FindFirst(HeaderId.MessageId) == null)
            {
                headers.AppendChild(new AsciiTextHeader("Message-Id", string.Concat(new string[]
                {
                    "<",
                    Guid.NewGuid().ToString("N"),
                    "@",
                    this.SourceServerFqdn,
                    ">"
                })));
            }
            MimeInternalHelpers.CopyHeaderBetweenList(this.context.RootPart.Headers, headers, "X-MS-Exchange-Moderation-Loop");
            transportMailItem.UpdateCachedHeaders();
            return(transportMailItem);
        }
 private void SetEnvelopeRecipients(TransportMailItem mailItem, IEnumerable <Participant> recipients, ref IList <string> invalidAddresses)
 {
     this.context.TraceDebug <long>("SmtpSubmissionItem.SetEnvelopeRecipients: Setting envelope recipients on mailitem {0}", mailItem.RecordId);
     foreach (Participant participant in recipients)
     {
         RoutingAddress argument;
         if (participant == null)
         {
             this.context.TraceError("SmtpSubmissionItem.SetEnvelopeRecipients: Null participant found in recipient list.");
         }
         else if (SubmissionItemUtils.TryGetRoutingAddress(mailItem.ADRecipientCache, participant.EmailAddress, participant.RoutingType, "SmtpSubmissionItem.SetEnvelopeRecipients", out argument))
         {
             this.context.TraceDebug <RoutingAddress>("SmtpSubmissionItem.SetEnvelopeRecipients: Added envelope recipient: {0}", argument);
             mailItem.Recipients.Add(argument.ToString());
         }
         else
         {
             if (invalidAddresses == null)
             {
                 invalidAddresses = new List <string>(1);
             }
             string item = SubmissionItemUtils.BuildParticipantString(participant);
             invalidAddresses.Add(item);
             this.context.TraceError <string, string, string>("SmtpSubmissionItem.SetEnvelopeRecipients: Could not get routing address for \"{0}\" / \"{1}:{2}\"", participant.DisplayName, participant.RoutingType, participant.EmailAddress);
         }
     }
 }
        public void Submit()
        {
            TransportMailItem transportMailItem = this.CreateMailItem();

            SubmissionItemUtils.CopySenderTo(this, transportMailItem);
            List <string> invalidRecipients = null;
            List <string> list = null;

            SubmissionItemUtils.CopyRecipientsTo(this, transportMailItem, new SubmissionRecipientHandler(this.RecipientHandler), ref invalidRecipients, ref list);
            this.ValidateRecipientCollections(transportMailItem, invalidRecipients);
            this.SubmitMailItem(transportMailItem, invalidRecipients);
        }
        private void SetEnvelopeSender(TransportMailItem mailItem, ProxyAddress sender)
        {
            RoutingAddress routingAddress;

            if (!SubmissionItemUtils.TryGetRoutingAddress(mailItem.ADRecipientCache, sender.AddressString, sender.PrefixString, "SmtpSubmissionItem.SetEnvelopeSender", out routingAddress))
            {
                this.context.TraceError <string>("SmtpSubmissionItem.SetEnvelopeSender: Could not get routing address for sender {0}.", sender.ToString());
                throw new InvalidSenderException(sender);
            }
            this.context.TraceDebug <RoutingAddress>("SmtpSubmissionItem.SetEnvelopeSender: Setting envelope sender: {0}", routingAddress);
            mailItem.From       = routingAddress;
            mailItem.MimeSender = routingAddress;
        }
Esempio n. 5
0
        private void CopyMfnRecipientsTo(MeetingForwardNotification meetingForwardNotification, TransportMailItem mailItem)
        {
            bool resubmittedMessage = this.item.ResubmittedMessage;

            foreach (Recipient recipient in meetingForwardNotification.Recipients)
            {
                RoutingAddress address;
                int?           recipientType;
                if (SubmissionItemUtils.TryGetRoutingAddressFromParticipant(mailItem.ADRecipientCache, recipient.Participant, "Recipient", out address) && SubmissionItemUtils.GetP2RecipientType(resubmittedMessage, recipient, out recipientType))
                {
                    MailRecipient transportRecipient = mailItem.Recipients.Add((string)address);
                    string        refTypePropValue   = SubmissionItemBase.GetRefTypePropValue <string>(recipient, StoreObjectSchema.DisplayName);
                    SubmissionItemUtils.CopyRecipientPropsFromXSOToTransport(this.item, recipient, transportRecipient, recipientType, refTypePropValue);
                    MSExchangeStoreDriverSubmission.TotalRecipients.Increment();
                }
            }
        }
        public void Submit(MessageTrackingSource messageTrackingSource, MemorySubmissionItem.OnConvertedToTransportMailItemDelegate transportMailItemHandler, MbxTransportMailItem relatedMailItem)
        {
            TransportMailItem transportMailItem;

            if (relatedMailItem == null)
            {
                transportMailItem = TransportMailItem.NewMailItem(this.organizationId, LatencyComponent.StoreDriverSubmit, MailDirectionality.Originating, default(Guid));
            }
            else
            {
                transportMailItem = TransportMailItem.NewSideEffectMailItem(relatedMailItem, this.organizationId, LatencyComponent.StoreDriverSubmit, MailDirectionality.Originating, relatedMailItem.ExternalOrganizationId);
            }
            base.CopyContentTo(transportMailItem);
            base.DecorateMessage(transportMailItem);
            base.ApplySecurityAttributesTo(transportMailItem);
            if (relatedMailItem != null)
            {
                transportMailItem.PrioritizationReason = relatedMailItem.PrioritizationReason;
                transportMailItem.Priority             = relatedMailItem.Priority;
            }
            SubmissionItemUtils.CopySenderTo(this, transportMailItem);
            List <string> invalidRecipients = null;
            List <string> list = null;

            SubmissionItemUtils.CopyRecipientsTo(this, transportMailItem, null, ref invalidRecipients, ref list);
            ClassificationUtils.PromoteStoreClassifications(transportMailItem.RootPart.Headers);
            SubmissionItemUtils.PatchQuarantineSender(transportMailItem, base.QuarantineOriginalSender);
            bool flag = transportMailItem.Recipients.Count > 0;

            if (relatedMailItem != null)
            {
                MimeInternalHelpers.CopyHeaderBetweenList(relatedMailItem.RootPart.Headers, transportMailItem.RootPart.Headers, "X-MS-Exchange-Moderation-Loop");
            }
            bool flag2 = transportMailItemHandler(transportMailItem, flag);

            if (flag && flag2)
            {
                MsgTrackReceiveInfo msgTrackInfo = new MsgTrackReceiveInfo(StoreDriverDelivery.LocalIPAddress, (relatedMailItem != null) ? new long?(relatedMailItem.RecordId) : null, transportMailItem.MessageTrackingSecurityInfo, invalidRecipients);
                MessageTrackingLog.TrackReceive(messageTrackingSource, transportMailItem, msgTrackInfo);
                Utils.SubmitMailItem(transportMailItem, false);
            }
        }