public void DecorateMessage(TransportMailItem message) { message.HeloDomain = ConfigurationProvider.GetDefaultDomainName(); message.ReceiveConnectorName = "FromLocal"; message.RefreshMimeSize(); long mimeSize = message.MimeSize; HeaderList headers = message.RootPart.Headers; if (!(headers.FindFirst(HeaderId.Date) is DateHeader)) { DateHeader newChild = new DateHeader("Date", DateTime.UtcNow.ToLocalTime()); headers.AppendChild(newChild); } headers.RemoveAll(HeaderId.Received); DateHeader dateHeader = new DateHeader("Date", DateTime.UtcNow.ToLocalTime()); string value = dateHeader.Value; ReceivedHeader newChild2 = new ReceivedHeader(this.SourceServerFqdn, SubmissionItemBase.FormatIPAddress(this.SourceServerNetworkAddress), this.LocalIP.HostName, this.ReceivedHeaderTcpInfo, null, this.mailProtocol, SubmissionItemBase.serverVersion, null, value); headers.PrependChild(newChild2); message.ExtendedProperties.SetValue <bool>("Microsoft.Exchange.Transport.ElcJournalReport", this.IsElcJournalReport); if (this.IsMapiAdminSubmission) { headers.AppendChild(new AsciiTextHeader("X-MS-Exchange-Organization-Mapi-Admin-Submission", string.Empty)); } if (this.IsDlExpansionProhibited) { headers.AppendChild(new AsciiTextHeader("X-MS-Exchange-Organization-DL-Expansion-Prohibited", string.Empty)); } headers.AppendChild(new AsciiTextHeader("X-MS-Exchange-Organization-Processed-By-MBTSubmission", string.Empty)); if (ConfigurationProvider.GetForwardingProhibitedFeatureStatus() && this.IsAltRecipientProhibited) { headers.AppendChild(new AsciiTextHeader("X-MS-Exchange-Organization-Alt-Recipient-Prohibited", string.Empty)); } headers.RemoveAll("X-MS-Exchange-Organization-OriginalSize"); headers.AppendChild(new AsciiTextHeader("X-MS-Exchange-Organization-OriginalSize", mimeSize.ToString(NumberFormatInfo.InvariantInfo))); headers.RemoveAll("X-MS-Exchange-Organization-OriginalArrivalTime"); Header newChild3 = new AsciiTextHeader("X-MS-Exchange-Organization-OriginalArrivalTime", Util.FormatOrganizationalMessageArrivalTime(this.OriginalCreateTime)); headers.AppendChild(newChild3); headers.RemoveAll("X-MS-Exchange-Organization-MessageSource"); Header newChild4 = new AsciiTextHeader("X-MS-Exchange-Organization-MessageSource", "StoreDriver"); headers.AppendChild(newChild4); headers.AppendChild(new AsciiTextHeader("X-MS-Exchange-Transport-FromEntityHeader", RoutingEndpoint.Hosted.ToString())); headers.AppendChild(new AsciiTextHeader("X-MS-Exchange-Organization-FromEntityHeader", RoutingEndpoint.Hosted.ToString())); message.Directionality = MailDirectionality.Originating; message.UpdateDirectionalityAndScopeHeaders(); }
private ExDateTime GetReceivedDate(Stream mimeStream, bool useSentTime) { ExDateTime?exDateTime = null; try { using (MimeReader mimeReader = new MimeReader(new SuppressCloseStream(mimeStream))) { if (mimeReader.ReadNextPart()) { while (mimeReader.HeaderReader.ReadNextHeader()) { if (mimeReader.HeaderReader.HeaderId == HeaderId.Received) { ReceivedHeader receivedHeader = Header.ReadFrom(mimeReader.HeaderReader) as ReceivedHeader; if (receivedHeader != null && receivedHeader.Date != null) { DateTime dateTime = this.ToDateTime(receivedHeader.Date); return(new ExDateTime(ExTimeZone.UtcTimeZone, dateTime)); } } if (useSentTime && mimeReader.HeaderReader.HeaderId == HeaderId.Date) { DateHeader dateHeader = Header.ReadFrom(mimeReader.HeaderReader) as DateHeader; if (dateHeader != null) { exDateTime = new ExDateTime?(new ExDateTime(ExTimeZone.UtcTimeZone, dateHeader.DateTime)); } } } } } } finally { mimeStream.Seek(0L, SeekOrigin.Begin); } if (exDateTime != null) { return(exDateTime.Value); } return(ExDateTime.MinValue); }
private void HandleHeader(IPipelineHandlerContext context, IPipelineMessage message, ReceivedHeader headerMsg) { _packetType = _mapper.GetPacketType(_header.ContentId); if (_packetType == null) { // not supported, let the rest of the pipeline // handle the packet. context.SendUpstream(message); } else { _header = headerMsg.Header; var buffer = _bufferPool.PopSlice(); if (_header.ContentLength > buffer.Capacity) { throw new InvalidOperationException( string.Format( "Buffer ({0} bytes) is less than the packet content ({1} bytes). Sorry, that's not possible in the current version.", buffer.Capacity, _header.ContentLength)); } _bytesLeft = _header.ContentLength; _stream = new BufferPoolStream(_bufferPool, buffer); } }