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);
        }
 private static void AckMailItemOnRetryException(AckStatus status, MbxTransportMailItem mailItem, RetryException exception, string sourceContext, ulong sessionId, ulong bytesDelivered, ulong recipientCount)
 {
     StoreDriverDeliveryDiagnostics.Diag.TraceDebug <RetryException, AckStatus>(0L, "StoreDriverDelivery encountered an exception {0}. Message Action: {1}.", exception, status);
     if (exception.MessageStatus.Action == MessageAction.RetryQueue)
     {
         mailItem.MessageLevelAction = MessageAction.RetryQueue;
     }
     mailItem.AckMailItem(status, exception.MessageStatus.Response, new AckDetails(StoreDriverDelivery.localHostName), exception.MessageStatus.RetryInterval, sourceContext);
     StoreDriverDelivery.LogRetryExceptionInConnectionLog(exception, mailItem, sourceContext, sessionId, bytesDelivered, recipientCount);
 }
        private bool ResolveMdbParameters(MbxTransportMailItem mbxItem, ulong sessionId)
        {
            bool         flag         = false;
            ProxyAddress proxyAddress = ProxyAddress.Parse("SMTP:" + mbxItem.Recipients[0].ToString());
            Result <TransportMiniRecipient> result;

            if (mbxItem.ADRecipientCache.TryGetValue(proxyAddress, out result) && result.Data != null)
            {
                if (result.Data.Database != null)
                {
                    mbxItem.DatabaseGuid = result.Data.Database.ObjectGuid;
                    mbxItem.DatabaseName = result.Data.Database.Name;
                    flag = true;
                }
                else if (result.Data.RecipientTypeDetails == RecipientTypeDetails.PublicFolder)
                {
                    ADObjectId adobjectId = null;
                    if (mbxItem.Recipients[0].ExtendedProperties.TryGetValue <ADObjectId>("Microsoft.Exchange.Transport.DirectoryData.Database", out adobjectId) && adobjectId != null)
                    {
                        mbxItem.DatabaseGuid = adobjectId.ObjectGuid;
                        mbxItem.DatabaseName = adobjectId.Name;
                        flag = true;
                    }
                }
            }
            if (flag)
            {
                Guid databaseGuid = mbxItem.DatabaseGuid;
                if (mbxItem.DatabaseGuid == Guid.Empty)
                {
                    flag = false;
                    StoreDriverDeliveryDiagnostics.Diag.TraceWarning <long>(0L, "MDB parameters were found but were null or empty for item {0}.", mbxItem.RecordId);
                }
            }
            if (!flag)
            {
                mbxItem.AckMailItem(AckStatus.Fail, AckReason.MissingMdbProperties, null, null, StoreDriverDelivery.GenerateSessionSourceContext(sessionId, mbxItem.SessionStartTime));
                StoreDriverDeliveryDiagnostics.Diag.TraceWarning <long>(0L, "Failed to get MDB parameters for item {0}.", mbxItem.RecordId);
            }
            return(flag);
        }