private static void ProcessMessage(Message message, DataHandler context)
{
if (String.IsNullOrEmpty(message.Address))
{
Debug.WriteLine("#Notification> Message is not sent and removed from the queue. Reason: Address is not provided. ");
Logger.WriteWarning("Message is not sent. Reason: Address is not provided.");
context.Messages.DeleteOnSubmit(message);
return;
}
var retryCount = Configuration.RetryCount;
while (true)
{
try
{
SendMessage(message);
context.Messages.DeleteOnSubmit(message);
break;
}
catch (SmtpFailedRecipientException exception)
{
SmtpStatusCode statusCode = exception.StatusCode;
if ((--retryCount != 0) &&
(statusCode == SmtpStatusCode.MailboxBusy || statusCode == SmtpStatusCode.MailboxUnavailable || statusCode == SmtpStatusCode.TransactionFailed))
{
Debug.WriteLine("#Notification SmtpFailedRecipientException RETRY> " + exception.Message + exception.StatusCode);
Logger.WriteException(exception);
Thread.Sleep(Configuration.RetryDelay);
}
else
{
context.Messages.DeleteOnSubmit(message);
Debug.WriteLine("#Notification SmtpFailedRecipientException> " + exception.Message + exception.StatusCode);
Debug.WriteLine("#Notification SmtpFailedRecipientException> Message is removed from the queue.");
Logger.WriteException(exception);
Logger.WriteWarning("Message is removed from queue.");
break;
}
}
}
}