public void BeginRetry(MessageHostSender messageHostSender, string reason, string details) { try { if (!_Run) return; _Lock.AcquireWriterLock(10000); List<DateTime> fails; if (!_FailedAttempts.TryGetValue(messageHostSender, out fails)) { fails = new List<DateTime>(); _FailedAttempts.Add(messageHostSender, fails); } int retryCount = fails.Count; fails.Add(DateTime.Now); if (retryCount < _RetryAttempts.Count) { DateTime retryTime = DateTime.Now.Add(_RetryAttempts[retryCount]); _PendingSends.Add(retryTime, messageHostSender); CheckRunThread(); throw new SendAttemptFailed(fails, messageHostSender, retryTime, reason, details); } else { // you have failed me for the last time admiral _FailedAttempts.Remove(messageHostSender); throw new SendAttemptsExhaustedException(fails, messageHostSender, reason, details); } } finally { try { _Lock.ReleaseWriterLock(); } catch { } } }
public MessageHostSenderException(MessageHostSender message) { _MessageSender = message; }
public HostRejectedException(SmtpStatusCode statusCode, MessageHostSender message) : base(message) { _StatusCode = statusCode; }
public FailedRecipientException(string failedRecipients, MessageHostSender messageSender) : base(messageSender) { _FailedRecipients = failedRecipients; }
public SendAttemptsExhaustedException(List<DateTime> sendAttempts, MessageHostSender message, string failure, string details) : base(message) { _SendAttempts = sendAttempts; _MessageSender = message; _CurrentFailureMessage = failure; _CurrentFailureDetails = details; }
public SendAttemptFailed(List<DateTime> sendAttempts, MessageHostSender message, DateTime nextAttempt, string failure, string details) : base(sendAttempts, message, failure, details) { _NextAttempt = nextAttempt; }