private static MessageStatus GetMessageStatus(IMessageConverter converter, ADTransientException unavailableException)
        {
            StorageExceptionHandler.LogException(converter, unavailableException);
            SmtpResponse exceptionSmtpResponse = StorageExceptionHandler.GetExceptionSmtpResponse(converter, unavailableException, false);

            return(new MessageStatus(MessageAction.Retry, exceptionSmtpResponse, unavailableException));
        }
        private static MessageStatus GetMessageStatus(IMessageConverter converter, DataValidationException invalidDataException)
        {
            StorageExceptionHandler.LogException(converter, invalidDataException);
            SmtpResponse exceptionSmtpResponse = StorageExceptionHandler.GetExceptionSmtpResponse(converter, invalidDataException, true, converter.IsOutbound ? AckReason.OutboundInvalidDirectoryData : AckReason.InboundInvalidDirectoryData);

            return(new MessageStatus(MessageAction.NDR, exceptionSmtpResponse, invalidDataException));
        }
        private static MessageStatus GetMessageStatus(IMessageConverter converter, ConversionFailedException exception)
        {
            StorageExceptionHandler.LogException(converter, exception);
            SmtpResponse exceptionSmtpResponse = StorageExceptionHandler.GetExceptionSmtpResponse(converter, exception, true, "554", (ConversionFailureReason.ExceedsLimit == exception.ConversionFailureReason) ? "5.3.4" : "5.6.0", StorageExceptionHandler.GetReasonDescription(exception.ConversionFailureReason), true);

            return(new MessageStatus(MessageAction.NDR, exceptionSmtpResponse, exception, true));
        }
 private static MessageStatus GetMessageStatus(IMessageConverter converter, DataSourceOperationException dataSourceOperationException)
 {
     if (dataSourceOperationException is ADInvalidCredentialException)
     {
         ADTransientException unavailableException = new ADTransientException(dataSourceOperationException.LocalizedString, dataSourceOperationException);
         return(StorageExceptionHandler.GetMessageStatus(converter, unavailableException));
     }
     StorageExceptionHandler.LogException(converter, dataSourceOperationException);
     return(new MessageStatus(MessageAction.NDR, StorageExceptionHandler.GetExceptionSmtpResponse(converter, dataSourceOperationException, true), dataSourceOperationException));
 }
        private static MessageStatus GetMessageStatus(IMessageConverter converter, IOException e)
        {
            StorageExceptionHandler.LogException(converter, e);
            SmtpResponse exceptionSmtpResponse = StorageExceptionHandler.GetExceptionSmtpResponse(converter, e, true, AckReason.DiskFull);

            if (ExceptionHelper.IsDiskFullException(e))
            {
                return(new MessageStatus(converter.IsOutbound ? MessageAction.RetryMailboxServer : MessageAction.RetryQueue, exceptionSmtpResponse, e));
            }
            return(new MessageStatus(MessageAction.Throw, exceptionSmtpResponse, e));
        }
Beispiel #6
0
        public MessageStatus Handle(string handlerName, Exception exception, IMessageConverter converter, TimeSpan fastRetryInterval, TimeSpan quarantineRetryInterval)
        {
            StorageExceptionHandler.LogException(converter, exception);
            exception.GetType();
            Exception exception2 = null;
            Exception exceptionAssociatedWithHandler                = null;
            ConcurrentDictionary <Type, Handler> handlerMap         = this.registeredHandlers[handlerName];
            ConcurrentDictionary <Type, Handler> overrideHandlerMap = this.overrideHandlers.ContainsKey(handlerName) ? this.overrideHandlers[handlerName] : null;
            Handler handler = ExceptionHandler.FindHandler(handlerMap, overrideHandlerMap, exception, out exception2, out exceptionAssociatedWithHandler);

            if (handler == null)
            {
                handler = ExceptionHandler.ThrowHandler;
            }
            return(handler.CreateStatus(exception2, exceptionAssociatedWithHandler, converter, fastRetryInterval, quarantineRetryInterval));
        }
 private static MessageStatus GetMessageStatus(IMessageConverter converter, StorageTransientException storageException)
 {
     StorageExceptionHandler.LogException(converter, storageException);
     if (storageException is MailboxInSiteFailoverException)
     {
         return(new MessageStatus(converter.IsOutbound ? MessageAction.Skip : MessageAction.Reroute, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, false), storageException));
     }
     if (storageException.InnerException != null)
     {
         MapiPermanentException ex = storageException.InnerException as MapiPermanentException;
         if (ex != null)
         {
             return(StorageExceptionHandler.GetMessageStatus <StorageTransientException>(converter, ex, storageException));
         }
         MapiRetryableException ex2 = storageException.InnerException as MapiRetryableException;
         if (ex2 != null)
         {
             return(StorageExceptionHandler.GetMessageStatus <StorageTransientException>(converter, ex2, storageException));
         }
     }
     return(new MessageStatus(MessageAction.Retry, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, false), storageException));
 }
        private static MessageStatus GetMessageStatus(IMessageConverter converter, StoragePermanentException storageException)
        {
            StorageExceptionHandler.LogException(converter, storageException);
            ConversionFailedException ex = storageException as ConversionFailedException;

            if (ex != null)
            {
                return(StorageExceptionHandler.GetMessageStatus(converter, ex));
            }
            if (storageException is MailboxCrossSiteFailoverException || storageException is MailboxInfoStaleException)
            {
                return(new MessageStatus(converter.IsOutbound ? MessageAction.Skip : MessageAction.Reroute, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true), storageException));
            }
            if (storageException is UnableToFindServerForDatabaseException || storageException is IllegalCrossServerConnectionException)
            {
                return(new MessageStatus(converter.IsOutbound ? MessageAction.Skip : MessageAction.RetryQueue, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, false), storageException));
            }
            if (storageException.InnerException is CannotGetSiteInfoException)
            {
                return(new MessageStatus(converter.IsOutbound ? MessageAction.RetryMailboxServer : MessageAction.RetryQueue, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException.InnerException, true), storageException));
            }
            if (storageException.InnerException != null)
            {
                MapiPermanentException ex2 = storageException.InnerException as MapiPermanentException;
                if (ex2 != null)
                {
                    return(StorageExceptionHandler.GetMessageStatus <StoragePermanentException>(converter, ex2, storageException));
                }
                MapiRetryableException ex3 = storageException.InnerException as MapiRetryableException;
                if (ex3 != null)
                {
                    return(StorageExceptionHandler.GetMessageStatus <StoragePermanentException>(converter, ex3, storageException));
                }
            }
            return(new MessageStatus(MessageAction.NDR, StorageExceptionHandler.GetExceptionSmtpResponse(converter, storageException, true), storageException));
        }
 private static MessageStatus GetMessageStatus(IMessageConverter converter, ExchangeDataException dataException)
 {
     StorageExceptionHandler.LogException(converter, dataException);
     return(new MessageStatus(MessageAction.NDR, StorageExceptionHandler.GetExceptionSmtpResponse(converter, dataException, true), dataException));
 }