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]; } } } }
internal static void MoveChildToNewParent(MimeNode newParent, MimeNode child) { if (newParent == child.Parent) { return; } child.RemoveFromParent(); newParent.AppendChild(child); }
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); }
internal override MimeNode ValidateNewChild(MimeNode newChild, MimeNode refChild) { throw new System.NotSupportedException(Resources.Strings.CannotAddChildrenToMimeHeaderDate); }
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(); } } } } } }
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"); }
internal override MimeNode ValidateNewChild(MimeNode newChild, MimeNode refChild) { throw new System.NotSupportedException(Resources.Strings.ChildrenCannotBeAddedToTextHeader); }
internal override MimeNode ValidateNewChild(MimeNode newChild, MimeNode refChild) { throw new System.NotSupportedException(Resources.Strings.AddingChildrenToAsciiTextHeader); }