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]; } } } }
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); }
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()); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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"); }