// Token: 0x06000174 RID: 372 RVA: 0x0000A754 File Offset: 0x00008954 private static int WriteMimePartsToEmailMessage(IEnumerable mimeParts, string toAddress, string fromAddress, Guid externalOrganizationId) { int num = 0; if (string.IsNullOrEmpty(fromAddress)) { fromAddress = "EHAJournalConfirmation@" + NativeHelpers.GetLocalComputerFqdn(false); } using (EmailMessage emailMessage = EmailMessage.Create(BodyFormat.Text)) { emailMessage.Subject = DateTime.UtcNow.ToString(); emailMessage.To.Add(new EmailRecipient(toAddress, toAddress)); emailMessage.Sender = new EmailRecipient(fromAddress, fromAddress); Header header = Header.Create("X-Sender"); header.Value = fromAddress; emailMessage.MimeDocument.RootPart.Headers.AppendChild(header); header = Header.Create("X-Receiver"); header.Value = toAddress; emailMessage.MimeDocument.RootPart.Headers.AppendChild(header); header = Header.Create("X-CreatedBy"); header.Value = "MSExchange12"; emailMessage.MimeDocument.RootPart.Headers.AppendChild(header); header = Header.Create("X-EndOfInjectedXHeaders"); header.Value = " "; emailMessage.MimeDocument.RootPart.Headers.AppendChild(header); Header header2 = Header.Create("X-MS-Exchange-Organization-ArchiveReplication-DataType"); header2.Value = " "; emailMessage.MimeDocument.RootPart.Headers.AppendChild(header2); using (MemoryStream memoryStream = new MemoryStream()) { using (MetaExtractMime metaExtractMime = new MetaExtractMime(fromAddress, memoryStream)) { metaExtractMime.SetContentDescriptionsProvider(EHALogSearchComponent.contentDescriptions); foreach (object obj in mimeParts) { EHALogSearchComponent.ConfirmationWrapper confirmationWrapper = (EHALogSearchComponent.ConfirmationWrapper)obj; try { if (metaExtractMime.AddBlobPart(confirmationWrapper.Confirmation, false, confirmationWrapper.EhaMessageId, confirmationWrapper.EoaMessageStatus)) { num++; } } catch (XmlException ex) { EHALogSearchComponent.logger.LogEvent(MSExchangeTransportLogSearchEventLogConstants.Tuple_TransportSyncLogEntryProcessingFailure, DateTime.UtcNow.Hour.ToString(), new object[] { ex }); ExTraceGlobals.ServiceTracer.TraceError <string, XmlException>(0L, "Failed to add confirmation part to message body. MessageId={0}; XmlException={1}", confirmationWrapper.EhaMessageId, ex); } } metaExtractMime.InsertLastPartEndingBoundary(); using (Stream contentWriteStream = emailMessage.Body.GetContentWriteStream()) { using (StreamWriter streamWriter = new StreamWriter(contentWriteStream)) { memoryStream.Seek(0L, SeekOrigin.Begin); streamWriter.Write(new StreamReader(memoryStream).ReadToEnd()); } } } } if (!EHALogSearchComponent.SubmitMessage(emailMessage, toAddress, fromAddress, externalOrganizationId)) { num = 0; } } return(num); }
// Token: 0x06000171 RID: 369 RVA: 0x0000A2B0 File Offset: 0x000084B0 private static void AddMessageCheckSend(string senderAddress, string recipientAddress, string messageId, Guid externalOrganizationId, uint batchSize, uint timeoutSeconds, Microsoft.Exchange.HostedServices.Archive.MetaReplication.ReplicationStatus status) { EHALogSearchComponent.JournalMessageSource journalMessageSource; if (!EHALogSearchComponent.journalMigrationJobs.TryGetValue(senderAddress, out journalMessageSource)) { journalMessageSource = new EHALogSearchComponent.JournalMessageSource(recipientAddress, batchSize, timeoutSeconds, DateTime.UtcNow); EHALogSearchComponent.journalMigrationJobs.Add(senderAddress, journalMessageSource); } else { if (string.Compare(journalMessageSource.ReplyFromAddress, recipientAddress, StringComparison.OrdinalIgnoreCase) != 0) { journalMessageSource.ReplyFromAddress = recipientAddress; } if (journalMessageSource.MaxResponses != batchSize) { journalMessageSource.MaxResponses = batchSize; } if (journalMessageSource.ResponseTimeout != timeoutSeconds) { journalMessageSource.ResponseTimeout = timeoutSeconds; } if (journalMessageSource.ExternalOrganizationId != externalOrganizationId) { journalMessageSource.ExternalOrganizationId = externalOrganizationId; } } if (!journalMessageSource.ReceivedMessageIds.ContainsKey(messageId)) { MessageInsertedKey messageInsertedKey = new MessageInsertedKey(); byte[] array = (from b in messageId.Split(new char[] { '-' }) select byte.Parse(b, NumberStyles.HexNumber)).ToArray <byte>(); messageInsertedKey.MessageId = array; EHALogSearchComponent.ConfirmationWrapper value = new EHALogSearchComponent.ConfirmationWrapper(new MessageInsertedConfirmation { Key = messageInsertedKey, CustomerId = ((((int)array[0] << 8 | (int)array[1]) << 8 | (int)array[2]) << 8 | (int)array[3]), Status = status, DatacenterName = "EOA" }, messageId, status.ToString()); journalMessageSource.ReceivedMessageIds.Add(messageId, value); } Hashtable hashtable = null; lock (EHALogSearchComponent.agentLogMonitor) { if ((long)journalMessageSource.ReceivedMessageIds.Count >= (long)((ulong)journalMessageSource.MaxResponses)) { hashtable = journalMessageSource.ReceivedMessageIds; journalMessageSource.ReceivedMessageIds = new Hashtable(); journalMessageSource.BatchStartTime = DateTime.UtcNow; } } if (hashtable != null) { EHALogSearchComponent.PrepareEmailMessage(senderAddress, recipientAddress, externalOrganizationId, hashtable); } }