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; }
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); } }