private void OnEndOfDataHandler(ReceiveMessageEventSource source, EndOfDataEventArgs e)
        {
            string[] addrs;
            //hash code is not guaranteed to be unique. Add time to fix uniqueness
            string itemId = e.MailItem.GetHashCode().ToString() + e.MailItem.FromAddress.ToString();

            if (this.origToMapping.TryGetValue(itemId, out addrs))
            {
                this.origToMapping.Remove(itemId);
                if (this.databaseConnector != null)
                {
                    this.databaseConnector.LogCatch(addrs[0], addrs[1], e.MailItem.Message.Subject, e.MailItem.Message.MessageId);
                }

                //Add / update orig to header
                if (CatchAllFactory.AppSettings.AddOrigToHeader)
                {
                    MimeDocument mdMimeDoc    = e.MailItem.Message.MimeDocument;
                    HeaderList   hlHeaderlist = mdMimeDoc.RootPart.Headers;
                    Header       origToHeader = hlHeaderlist.FindFirst("X-OrigTo");

                    if (origToHeader == null)
                    {
                        MimeNode   lhLasterHeader = hlHeaderlist.LastChild;
                        TextHeader nhNewHeader    = new TextHeader("X-OrigTo", addrs[0]);
                        hlHeaderlist.InsertBefore(nhNewHeader, lhLasterHeader);
                    }
                    else
                    {
                        origToHeader.Value += ", " + addrs[0];
                    }
                }
            }
        }
Exemplo n.º 2
0
        public void PostDocumentTextHeaderTest()
        {
            const string name = "4pages.pdf";

            UploadFile(name, name);

            TextHeader header = new TextHeader
            {
                Background          = true,
                LeftMargin          = 1,
                RightMargin         = 2,
                TopMargin           = 20,
                HorizontalAlignment = HorizontalAlignment.Center,
                Opacity             = 1,
                Rotate        = Rotation.None,
                RotateAngle   = 10,
                XIndent       = 0,
                YIndent       = 0,
                Zoom          = 1,
                TextAlignment = HorizontalAlignment.Center,
                Value         = "Header",
                TextState     = new TextState(FontSize: 14d, Font: "Arial Bold",
                                              ForegroundColor: new Color(255, 0, 255, 0),
                                              BackgroundColor: new Color(255, 255, 0, 0), FontStyle: FontStyles.Bold)
            };

            int startPage = 2;
            int endPage   = 3;
            var response  = PdfApi.PostDocumentTextHeader(name, header, startPage, endPage, folder: TempFolder);

            Assert.That(response.Code, Is.EqualTo(200));
        }
        public override void Execute(IEmailItem emailItem = null, int?lastExitCode = null)
        {
            if (!AppliesTo(emailItem, lastExitCode))
            {
                return;
            }

            var sb = new StringBuilder();

            if (emailItem.GetUnderlyingObject() is MailItem mailItem)
            {
                var rcptsToRemove = mailItem.Recipients.Where(x => !ToSmtpAddress.Equals(x.Address.ToString(), StringComparison.InvariantCultureIgnoreCase));

                foreach (var rcpt in rcptsToRemove)
                {
                    Logger.Info("[MessageID {0}] Removing {1} from CC...", emailItem.Message.MessageId, rcpt.Address.ToString());
                    sb.Append(rcpt.Address.ToString() + ";");
                    mailItem.Recipients.Remove(rcpt);
                }
            }

            Logger.Info("[MessageID {0}] Share-With: {1}...", emailItem.Message.MessageId, sb.ToString());

            var header = new TextHeader(HeaderKey, sb.ToString());

            emailItem.Message.RootPart.Headers.AppendChild(header);
        }
Exemplo n.º 4
0
        private ApprovalEngine.ApprovalProcessResults HandleInitiationMessage(InitiationMessage initiationMessage)
        {
            if (initiationMessage.IsMapiInitiator)
            {
                if (!this.sender.Equals(this.recipient))
                {
                    return(ApprovalEngine.ApprovalProcessResults.Invalid);
                }
            }
            else if (string.Equals("ModeratedTransport", initiationMessage.ApprovalInitiator, StringComparison.OrdinalIgnoreCase))
            {
                this.messageItem[MessageItemSchema.ApprovalApplicationId] = 1;
                HeaderList headers    = this.message.MimeDocument.RootPart.Headers;
                TextHeader textHeader = headers.FindFirst("X-MS-Exchange-Organization-Moderation-Data") as TextHeader;
                string     value;
                if (textHeader != null && textHeader.TryGetValue(out value) && !string.IsNullOrEmpty(value))
                {
                    this.messageItem[MessageItemSchema.ApprovalApplicationData] = value;
                }
                this.StampModeratedTransportExpiry();
            }
            if (initiationMessage.DecisionMakers == null)
            {
                return(ApprovalEngine.ApprovalProcessResults.Invalid);
            }
            if (InitiationProcessor.CheckDuplicateInitiationAndUpdateIdIfNecessary(this.messageItem))
            {
                return(ApprovalEngine.ApprovalProcessResults.DuplicateInitiation);
            }
            InitiationProcessor initiationProcessor = new InitiationProcessor(this.mbxTransportMailItem, initiationMessage, this.messageItem, this.requestCreate, this.recipient);

            return(initiationProcessor.PrepareApprovalRequestData());
        }
Exemplo n.º 5
0
        internal static bool ResubmitApprovedMessage(MessageItem messageItem, TransportMailItem transportMailItem, string approverAddress)
        {
            DateTime   utcNow     = DateTime.UtcNow;
            HeaderList headerList = (transportMailItem.RootPart != null) ? transportMailItem.RootPart.Headers : null;

            if (!ModerationHelper.RestoreOriginalMessage(messageItem, transportMailItem, TraceHelper.ModeratedTransportTracer, TraceHelper.MessageProbeActivityId))
            {
                return(false);
            }
            transportMailItem.RootPart.Headers.RemoveAll("X-MS-Exchange-Organization-Approval-Approved");
            TextHeader textHeader = (TextHeader)Header.Create("X-MS-Exchange-Organization-Approval-Approved");

            textHeader.Value = (string)transportMailItem.Recipients[0].Email;
            foreach (MailRecipient mailRecipient in transportMailItem.Recipients)
            {
                if (mailRecipient.Status == Status.Ready)
                {
                    textHeader.Value = (string)mailRecipient.Email;
                    break;
                }
            }
            transportMailItem.RootPart.Headers.AppendChild(textHeader);
            if (transportMailItem.RootPart.Headers.FindFirst("X-MS-Exchange-Organization-Moderation-SavedArrivalTime") == null)
            {
                Header header = transportMailItem.RootPart.Headers.FindFirst("X-MS-Exchange-Organization-OriginalArrivalTime");
                string value  = null;
                if (header != null)
                {
                    value = header.Value;
                }
                if (!string.IsNullOrEmpty(value))
                {
                    transportMailItem.RootPart.Headers.AppendChild(new AsciiTextHeader("X-MS-Exchange-Organization-Moderation-SavedArrivalTime", value));
                }
            }
            TextHeader textHeader2     = (TextHeader)Header.Create("X-Moderation-Data");
            ExDateTime?valueAsNullable = messageItem.GetValueAsNullable <ExDateTime>(MessageItemSchema.ApprovalDecisionTime);

            if (valueAsNullable != null)
            {
                textHeader2.Value = valueAsNullable.ToString();
                transportMailItem.RootPart.Headers.AppendChild(textHeader2);
            }
            if (headerList != null)
            {
                Header[] array = headerList.FindAll(HeaderId.Received);
                foreach (Header header2 in array)
                {
                    Header header3 = Header.Create(HeaderId.Received);
                    header2.CopyTo(header3);
                    transportMailItem.RootPart.Headers.PrependChild(header3);
                }
            }
            transportMailItem.RootPart.Headers.RemoveAll("X-MS-Exchange-Organization-OriginalArrivalTime");
            transportMailItem.RootPart.Headers.AppendChild(new AsciiTextHeader("X-MS-Exchange-Organization-OriginalArrivalTime", Util.FormatOrganizationalMessageArrivalTime(utcNow)));
            transportMailItem.UpdateDirectionalityAndScopeHeaders();
            transportMailItem.UpdateCachedHeaders();
            MessageTrackingLog.TrackReceiveForApprovalRelease(transportMailItem, approverAddress, messageItem.InternetMessageId);
            return(true);
        }
Exemplo n.º 6
0
        internal static bool Get2047CharsetName(TextHeader textHeader, out string charsetName)
        {
            DecodingOptions decodingOptions = new DecodingOptions(DecodingFlags.Rfc2047, null);
            DecodingResults decodingResults;
            string          text;

            if (textHeader.TryGetValue(decodingOptions, out decodingResults, out text) && EncodingScheme.Rfc2047 == decodingResults.EncodingScheme)
            {
                charsetName = decodingResults.CharsetName;
                return(true);
            }
            charsetName = null;
            return(false);
        }
Exemplo n.º 7
0
        internal static string GetHeaderValue(Header header)
        {
            TextHeader textHeader = header as TextHeader;

            if (textHeader != null)
            {
                DecodingResults decodingResults;
                string          result;
                textHeader.TryGetValue(Utility.DecodeOrFallBack, out decodingResults, out result);
                return(result);
            }
            if (header != null)
            {
                return(header.Value);
            }
            return(null);
        }
Exemplo n.º 8
0
        private bool TryGetHeaderValue(string headerName, out string value)
        {
            HeaderList headers    = this.message.MimeDocument.RootPart.Headers;
            TextHeader textHeader = headers.FindFirst(headerName) as TextHeader;

            value = null;
            if (textHeader == null)
            {
                InitiationMessage.diag.TraceDebug <string>((long)this.GetHashCode(), "'{0}' header not found from message.", headerName);
                return(false);
            }
            if (!textHeader.TryGetValue(out value) || string.IsNullOrEmpty(value))
            {
                InitiationMessage.diag.TraceDebug <string>((long)this.GetHashCode(), "'{0}' header cannot be read from message.", headerName);
                return(false);
            }
            return(true);
        }
            private static string GetTextHeaderValue(MbxTransportMailItem rmi, string headerName)
            {
                TextHeader textHeader = rmi.RootPart.Headers.FindFirst(headerName) as TextHeader;

                if (textHeader == null)
                {
                    ExTraceGlobals.DeliveryAgentTracer.TraceDebug <string>(rmi.RecordId, "Header not found: {0}", headerName);
                    return(null);
                }
                DecodingResults decodingResults;
                string          result;

                if (!textHeader.TryGetValue(DecodingOptions.None, out decodingResults, out result))
                {
                    ExTraceGlobals.DeliveryAgentTracer.TraceDebug <string>(rmi.RecordId, "Could not decode the header value for header: {0}", headerName);
                    return(null);
                }
                return(result);
            }
Exemplo n.º 10
0
        internal static void SetFileName(MimePart attachmentPart, AttachmentType attachmentType, string value)
        {
            TextHeader textHeader = attachmentPart.Headers.FindFirst(HeaderId.ContentDescription) as TextHeader;

            if (textHeader == null)
            {
                textHeader = (Header.Create(HeaderId.ContentDescription) as TextHeader);
                attachmentPart.Headers.AppendChild(textHeader);
            }
            textHeader.Value = value;
            Utility.StoreFileNameInHeader(attachmentPart, HeaderId.ContentType, () => attachmentPart.ContentType, "name", value);
            Utility.StoreFileNameInHeader(attachmentPart, HeaderId.ContentDisposition, delegate
            {
                if (attachmentType != AttachmentType.Inline)
                {
                    return("attachment");
                }
                return("inline");
            }, "filename", value);
        }
Exemplo n.º 11
0
            public static MeetingSeriesMessageOrderingAgent.SeriesHeadersData FromHeaderList(HeaderList headers, Guid messageId)
            {
                TextHeader textHeader  = headers.FindFirst("X-MS-Exchange-Calendar-Series-Id") as TextHeader;
                TextHeader textHeader2 = headers.FindFirst("X-MS-Exchange-Calendar-Series-Sequence-Number") as TextHeader;
                TextHeader textHeader3 = headers.FindFirst("X-MS-Exchange-Calendar-Series-Instance-Id") as TextHeader;
                TextHeader textHeader4 = headers.FindFirst("X-MS-Exchange-Calendar-Series-Master-Id") as TextHeader;
                TextHeader textHeader5 = headers.FindFirst("X-MS-Exchange-Calendar-Series-Instance-Unparked") as TextHeader;

                MeetingSeriesMessageOrderingAgent.SeriesHeadersData result = new MeetingSeriesMessageOrderingAgent.SeriesHeadersData
                {
                    SeriesId = ((textHeader != null) ? textHeader.Value : null)
                };
                MeetingSeriesMessageOrderingAgent.tracer.TraceDebug <string>(0L, "SeriesId: {0}", result.SeriesId ?? string.Empty);
                int num;

                if (textHeader2 != null && int.TryParse(textHeader2.Value, out num))
                {
                    result.SeriesSequenceNumber = num;
                    MeetingSeriesMessageOrderingAgent.tracer.TraceDebug <int>(0L, "SeriesSequenceNumber: {0}", num);
                }
                byte[] instanceGoid;
                if (textHeader3 != null && MeetingSeriesMessageOrderingAgent.SeriesHeadersData.TryParseGoid(textHeader3.Value, out instanceGoid))
                {
                    result.InstanceGoid = instanceGoid;
                    MeetingSeriesMessageOrderingAgent.tracer.TraceDebug <string>(0L, "InstanceGoid: {0}", textHeader3.Value);
                }
                byte[] masterGoid;
                if (textHeader4 != null && MeetingSeriesMessageOrderingAgent.SeriesHeadersData.TryParseGoid(textHeader4.Value, out masterGoid))
                {
                    result.MasterGoid = masterGoid;
                    MeetingSeriesMessageOrderingAgent.tracer.TraceDebug <string>(0L, "MasterGoid: {0}", textHeader4.Value);
                }
                if (textHeader5 != null && !string.IsNullOrEmpty(textHeader5.Value))
                {
                    result.UnparkedMessage = (textHeader5.Value == messageId.ToString());
                    MeetingSeriesMessageOrderingAgent.tracer.TraceDebug <string, Guid>(0L, "UnparkedMessageId: {0}, processed message id: {1}", textHeader5.Value, messageId);
                }
                return(result);
            }
Exemplo n.º 12
0
 private StoreObjectId GetCachedCalendarItemIdFromHeaders(StoreDriverDeliveryEventArgsImpl args)
 {
     if (MeetingSeriesMessageOrderingAgent.SeriesMessageOrderingEnabled(args.MailboxOwner))
     {
         TextHeader textHeader = args.MailItem.Message.MimeDocument.RootPart.Headers.FindFirst("X-MS-Exchange-Calendar-Series-Instance-Calendar-Item-Id") as TextHeader;
         if (textHeader != null && !string.IsNullOrEmpty(textHeader.Value))
         {
             try
             {
                 return(StoreObjectId.Deserialize(textHeader.Value));
             }
             catch (FormatException arg)
             {
                 MeetingMessageProcessingAgent.tracer.TraceWarning <string, string, FormatException>((long)this.GetHashCode(), "Error deserializing cached calender item id from headers. Message {0}, mailbox {1}, error: {2}", args.MessageItem.InternetMessageId, args.MailboxSession.MailboxOwnerLegacyDN, arg);
             }
             catch (CorruptDataException arg2)
             {
                 MeetingMessageProcessingAgent.tracer.TraceWarning <string, string, CorruptDataException>((long)this.GetHashCode(), "Error deserializing cached calender item id from headers. Message {0}, mailbox {1}, error: {2}", args.MessageItem.InternetMessageId, args.MailboxSession.MailboxOwnerLegacyDN, arg2);
             }
         }
     }
     return(null);
 }
Exemplo n.º 13
0
        void SCPRoutingAgent_OnResolvedMessage(ResolvedMessageEventSource source, QueuedMessageEventArgs e)
        {
            try
            {
                WriteLine("Start SCPRoutingAgent_OnResolvedMessage");

                WriteLine("\tFromAddress: " + e.MailItem.FromAddress.ToString());
                WriteLine("\tSubject: " + e.MailItem.Message.Subject.ToString());
                WriteLine("\tMapiMessageClass: " + e.MailItem.Message.MapiMessageClass.ToString());

                MimeDocument mdMimeDoc    = e.MailItem.Message.MimeDocument;
                HeaderList   hlHeaderlist = mdMimeDoc.RootPart.Headers;
                Header       mhProcHeader = hlHeaderlist.FindFirst("X-SCP");

                if (mhProcHeader == null)
                {
                    WriteLine("\tTouched: " + "No");

                    if (!e.MailItem.Message.IsSystemMessage)
                    {
                        bool touched = false;

                        if (e.MailItem.FromAddress.DomainPart != null)
                        {
                            foreach (EnvelopeRecipient recp in e.MailItem.Recipients)
                            {
                                WriteLine("\t\tFrom: " + e.MailItem.Message.From.SmtpAddress.ToString().ToLower());
                                WriteLine("\t\tTo: " + recp.Address.ToString().ToLower());
                                string[] tmpFrom = e.MailItem.Message.From.SmtpAddress.Split('@');
                                string[] tmpTo   = recp.Address.ToString().Split('@');
                                if (IsMessageBetweenTenants(tmpFrom[1].ToLower(), tmpTo[1].ToLower()))
                                {
                                    WriteLine("\t\tMessage routed to domain: " + tmpTo[1].ToLower() + routingDomain);
                                    RoutingDomain   myRoutingDomain   = new RoutingDomain(tmpTo[1].ToLower() + routingDomain);
                                    RoutingOverride myRoutingOverride = new RoutingOverride(myRoutingDomain, DeliveryQueueDomain.UseOverrideDomain);
                                    source.SetRoutingOverride(recp, myRoutingOverride);
                                    touched = true;
                                }
                            }
                        }
                        else
                        {
                            if ((e.MailItem.Message.MapiMessageClass.ToString() == "IPM.Note.Rules.OofTemplate.Microsoft") &
                                blockInternalInterTenantOOF)
                            {
                                WriteLine("\t\tOOF From: " + e.MailItem.Message.From.SmtpAddress);
                                if (e.MailItem.Message.From.SmtpAddress.Contains("@"))
                                {
                                    string[] tmpFrom = e.MailItem.Message.From.SmtpAddress.Split('@');
                                    foreach (EnvelopeRecipient recp in e.MailItem.Recipients)
                                    {
                                        WriteLine("\t\tTo: " + recp.Address.ToString().ToLower());
                                        string[] tmpTo = recp.Address.ToString().Split('@');
                                        if (IsMessageBetweenTenants(tmpFrom[1].ToLower(), tmpTo[1].ToLower()))
                                        {
                                            WriteLine("\t\tRemove: " + tmpTo[1].ToLower());
                                            e.MailItem.Recipients.Remove(recp);
                                        }
                                    }
                                }
                            }
                        }

                        if (touched)
                        {
                            MimeNode   lhLasterHeader = hlHeaderlist.LastChild;
                            TextHeader nhNewHeader    = new TextHeader("X-SCP", "Logged00");
                            hlHeaderlist.InsertBefore(nhNewHeader, lhLasterHeader);
                        }
                    }
                    else
                    {
                        WriteLine("\tSystem Message");
                    }
                }
                else
                {
                    WriteLine("\tTouched: " + "Yes");
                }
            }

            catch (Exception ex)
            {
                WriteLine("\t[Error] Error :" + ex.Message);
                LogErrorToEventLog("[Error] [OnResolvedMessage] Error :" + ex.Message);
            }

            WriteLine("End SCPRoutingAgent_OnResolvedMessage");
        }
        public override void Execute(IEmailItem emailItem = null, int? lastExitCode = null)
        {
            if (AppliesTo(emailItem, lastExitCode))
            {
                var sb = new StringBuilder();
                var mailItem = emailItem.GetUnderlyingObject() as MailItem;

                if (null != mailItem)
                {
                    var rcptsToRemove = mailItem.Recipients.Where(x => !ToSmtpAddress.Equals(x.Address.ToString(), StringComparison.InvariantCultureIgnoreCase));

                    foreach (var rcpt in rcptsToRemove)
                    {
                        this.Info("[MessageID {0}] Removing {1} from CC...", emailItem.Message.MessageId, rcpt.Address.ToString());
                        sb.Append(rcpt.Address.ToString() + ";");
                        mailItem.Recipients.Remove(rcpt);
                    }
                }

                this.Info("[MessageID {0}] Share-With: {1}...", emailItem.Message.MessageId, sb.ToString());

                var header = new TextHeader(HeaderKey, sb.ToString());
                emailItem.Message.RootPart.Headers.AppendChild(header);
            }
        }
        internal void SetProperty(string stPropName, string stPropVal, EPropertyType eProp = EPropertyType.XHdrProp)
        {
            _Log.DebugFormat("SetProperty() Setting property {0} - {1} for mail {2}", stPropName, stPropVal, _mail.Message.Subject);
            try
            {
                MimePart tnefPart = _mail.Message.TnefPart;
                MimeDocument mdMimeDoc = _mail.Message.MimeDocument;
                HeaderList hlHeaderlist = mdMimeDoc.RootPart.Headers;
                _Log.DebugFormat("SetHeader(): Tnef null: {0}, mimedoc null: {1}, header list: {2}", tnefPart == null, mdMimeDoc == null, hlHeaderlist == null);

                Header hdrToInsert = hlHeaderlist.FindFirst(stPropName);
                if (hdrToInsert == null)
                {
                    _Log.DebugFormat("SetProperty(): Header does not exist. Inserting new.");
                    TextHeader nhNewKeywords = new TextHeader(stPropName, stPropVal);
                    MimeNode lhLasterHeader = hlHeaderlist.LastChild;
                    MimeNode hdrNew = hlHeaderlist.InsertBefore(nhNewKeywords, lhLasterHeader);

                    _Log.DebugFormat("SetProperty(): Header inserted: {0}", hdrNew == null);
                }
                else
                {
                    _Log.DebugFormat("SetProperty(): Header exists. Updating value");
                    hdrToInsert.Value = stPropVal;
                }
            }
            catch (Exception x)
            {
                _Log.ErrorFormat("SetProperty(): Error - {0}", x.ToString());
            }
            _Log.DebugFormat("SetProperty() Set property '{0} - {1}' for mail: {2}", stPropName, stPropVal, _mail.Message.Subject);
        }
Exemplo n.º 16
0
        void WSPRoutingAgent_OnResolvedMessage(ResolvedMessageEventSource source, QueuedMessageEventArgs e)
        {
            try
            {

                WriteLine("Start WSPRoutingAgent_OnResolvedMessage");

                WriteLine("\tFromAddress: " + e.MailItem.FromAddress.ToString());
                WriteLine("\tSubject: " + e.MailItem.Message.Subject.ToString());
                WriteLine("\tMapiMessageClass: " + e.MailItem.Message.MapiMessageClass.ToString());

                MimeDocument mdMimeDoc = e.MailItem.Message.MimeDocument;
                HeaderList hlHeaderlist = mdMimeDoc.RootPart.Headers;
                Header mhProcHeader = hlHeaderlist.FindFirst("X-WSP");

                if (mhProcHeader == null)
                {
                    WriteLine("\tTouched: " + "No");

                    if (!e.MailItem.Message.IsSystemMessage)
                    {
                        bool touched = false;

                        if (e.MailItem.FromAddress.DomainPart != null)
                        {
                            foreach (EnvelopeRecipient recp in e.MailItem.Recipients)
                            {
                                WriteLine("\t\tFrom: " + e.MailItem.Message.From.SmtpAddress.ToString().ToLower());
                                WriteLine("\t\tTo: " + recp.Address.ToString().ToLower());
                                string[] tmpFrom = e.MailItem.Message.From.SmtpAddress.Split('@');
                                string[] tmpTo = recp.Address.ToString().Split('@');
                                if (IsMessageBetweenTenants(tmpFrom[1].ToLower(), tmpTo[1].ToLower()))
                                {
                                    WriteLine("\t\tMessage routed to domain: " + tmpTo[1].ToLower() + routingDomain);
                                    RoutingDomain myRoutingDomain = new RoutingDomain(tmpTo[1].ToLower() + routingDomain);
                                    RoutingOverride myRoutingOverride = new RoutingOverride(myRoutingDomain, DeliveryQueueDomain.UseOverrideDomain);
                                    source.SetRoutingOverride(recp, myRoutingOverride);
                                    touched = true;
                                }
                            }
                        }
                        else
                        {
                            if ((e.MailItem.Message.MapiMessageClass.ToString() == "IPM.Note.Rules.OofTemplate.Microsoft") &
                                blockInternalInterTenantOOF)
                            {
                                WriteLine("\t\tOOF From: " + e.MailItem.Message.From.SmtpAddress);
                                if (e.MailItem.Message.From.SmtpAddress.Contains("@"))
                                {
                                    string[] tmpFrom = e.MailItem.Message.From.SmtpAddress.Split('@');
                                    foreach (EnvelopeRecipient recp in e.MailItem.Recipients)
                                    {
                                        WriteLine("\t\tTo: " + recp.Address.ToString().ToLower());
                                        string[] tmpTo = recp.Address.ToString().Split('@');
                                        if (IsMessageBetweenTenants(tmpFrom[1].ToLower(), tmpTo[1].ToLower()))
                                        {
                                            WriteLine("\t\tRemove: " + tmpTo[1].ToLower());
                                            e.MailItem.Recipients.Remove(recp);
                                        }
                                    }
                                }
                            }
                        }

                        if (touched)
                        {
                            MimeNode lhLasterHeader = hlHeaderlist.LastChild;
                            TextHeader nhNewHeader = new TextHeader("X-WSP", "Logged00");
                            hlHeaderlist.InsertBefore(nhNewHeader, lhLasterHeader);
                        }
                    }
                    else
                        WriteLine("\tSystem Message");
                }
                else
                    WriteLine("\tTouched: " + "Yes");

            }

            catch (Exception ex)
            {
                WriteLine("\t[Error] Error :" + ex.Message);
                LogErrorToEventLog("[Error] [OnResolvedMessage] Error :" + ex.Message);
            }

            WriteLine("End WSPRoutingAgent_OnResolvedMessage");
        }