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];
                    }
                }
            }
        }
Esempio n. 2
0
 internal static void MoveChildToNewParent(MimeNode newParent, MimeNode child)
 {
     if (newParent == child.Parent)
     {
         return;
     }
     child.RemoveFromParent();
     newParent.AppendChild(child);
 }
Esempio n. 3
0
            public override bool FilterHeaderList(HeaderList headerList, Stream stream)
            {
                Header header = headerList.FindFirst(HeaderId.ContentTransferEncoding);

                if (header != null)
                {
                    ContentTransferEncoding encodingType = MimePart.GetEncodingType(header.FirstRawToken);
                    if (encodingType == ContentTransferEncoding.EightBit || encodingType == ContentTransferEncoding.Binary)
                    {
                        ContentTypeHeader typeHeader = headerList.FindFirst(HeaderId.ContentType) as ContentTypeHeader;
                        bool flag;
                        bool flag2;
                        EightToSevenBitConverter.Analyse(typeHeader, out this.embedded, out flag, out flag2);
                        for (MimeNode mimeNode = headerList.FirstChild; mimeNode != null; mimeNode = mimeNode.NextSibling)
                        {
                            if (HeaderId.ContentTransferEncoding == (mimeNode as Header).HeaderId)
                            {
                                if (flag || this.embedded)
                                {
                                    this.encoder = null;
                                }
                                else if (flag2)
                                {
                                    stream.Write(EightToSevenBitConverter.CteQP, 0, EightToSevenBitConverter.CteQP.Length);
                                    this.encoder = new QPEncoder();
                                }
                                else
                                {
                                    stream.Write(EightToSevenBitConverter.CteBase64, 0, EightToSevenBitConverter.CteBase64.Length);
                                    this.encoder = new Base64Encoder();
                                }
                            }
                            else
                            {
                                mimeNode.WriteTo(stream);
                            }
                        }
                        stream.Write(MimeString.CrLf, 0, MimeString.CrLf.Length);
                        return(true);
                    }
                }
                return(false);
            }
Esempio n. 4
0
 internal override MimeNode ValidateNewChild(MimeNode newChild, MimeNode refChild)
 {
     throw new System.NotSupportedException(Resources.Strings.CannotAddChildrenToMimeHeaderDate);
 }
Esempio n. 5
0
 internal void WriteMimeNode(MimeNode node)
 {
     if (node == null)
         throw new System.ArgumentNullException(nameof(node));
     var header1 = node as Header;
     if (header1 != null) {
         this.WriteHeader(header1);
         this.FlushHeader();
     } else {
         var mimePart = node as MimePart;
         if (mimePart != null) {
             this.StartPart();
             mimePart.WriteTo(shimStream, encodingOptions);
             this.EndPart();
         } else {
             var headerList = node as HeaderList;
             if (headerList != null) {
                 foreach (var header2 in headerList)
                     this.WriteHeader(header1);
                 this.FlushHeader();
             } else {
                 node = node.Clone();
                 var recipient = node as MimeRecipient;
                 if (recipient != null)
                     this.WriteRecipient(recipient);
                 else {
                     var parameter = node as MimeParameter;
                     if (parameter != null)
                         this.WriteParameter(parameter);
                     else {
                         var group = node as MimeGroup;
                         if (group == null)
                             return;
                         this.StartGroup(group);
                         this.EndGroup();
                     }
                 }
             }
         }
     }
 }
Esempio n. 6
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");
        }
Esempio n. 7
0
 internal override MimeNode ValidateNewChild(MimeNode newChild, MimeNode refChild)
 {
     throw new System.NotSupportedException(Resources.Strings.ChildrenCannotBeAddedToTextHeader);
 }
Esempio n. 8
0
 internal override MimeNode ValidateNewChild(MimeNode newChild, MimeNode refChild)
 {
     throw new System.NotSupportedException(Resources.Strings.AddingChildrenToAsciiTextHeader);
 }