Пример #1
0
        private int DeliverMailItem(MbxTransportMailItem mailItem, ulong sessionId)
        {
            int result = 0;

            TraceHelper.MessageProbeActivityId = mailItem.SystemProbeId;
            TraceHelper.StoreDriverDeliveryTracer.TracePass <string>(TraceHelper.MessageProbeActivityId, 0L, "Delivery: Processing started for MessageId {0}.", mailItem.InternetMessageId ?? "NULL");
            TimeSpan?retryInterval;

            using (MailItemDeliver mailItemDeliver = new MailItemDeliver(mailItem, sessionId))
            {
                try
                {
                    StoreDriverDeliveryDiagnostics.HangDetector[sessionId] = mailItemDeliver;
                    mailItemDeliver.DeliverToRecipients();
                }
                finally
                {
                    StoreDriverDeliveryDiagnostics.HangDetector.Remove(sessionId);
                }
                result        = mailItemDeliver.DeliveredRecipients;
                retryInterval = mailItemDeliver.RetryInterval;
            }
            AckDetails ackDetails = new AckDetails(StoreDriverDelivery.localHostName);

            ackDetails.AddEventData("MailboxDatabaseName", mailItem.DatabaseName);
            mailItem.AckMailItem(AckStatus.Success, SmtpResponse.NoopOk, ackDetails, retryInterval, StoreDriverDelivery.GenerateSessionSourceContext(sessionId, mailItem.SessionStartTime));
            TraceHelper.StoreDriverDeliveryTracer.TracePass <string>(TraceHelper.MessageProbeActivityId, 0L, "Delivery: Processing complete for MessageID {0}.", mailItem.InternetMessageId ?? "NULL");
            return(result);
        }