Ведение журнала ошибок при отправке электронной почты ASync с помощью MvcMailer - PullRequest
1 голос
/ 18 ноября 2011

Я использую отличный пакет MvcMailer для отправки электронной почты из моего приложения. Я использую метод SendAsync () для отправки электронной почты и хотел бы регистрировать ошибки + избавляться от вложений, т.е.

MailMessage message = UserMailer.SendSomeEmail(emailViewModel);

        var client = new SmtpClientWrapper();
        client.SendCompleted += (sender, e) =>
        {
            if (e.Error != null || e.Cancelled)
            {
                Logger.LogError(e.Error);
            }
            if (message != null)
            {
                message.Attachments.Dispose();
                message.Dispose();
            }
            client.Dispose();
        };
        message.SendAsync("this means nothing afaik", client);

Это прекрасно работает, но было бы слишком больно повторять один и тот же фрагмент везде, куда мне нужно отправить электронное письмо.

Как мне настроить это так, чтобы я мог регистрировать любые ошибки + избавляться от вложений в сообщения, когда асинхронный вызов завершен? Должен быть лучший способ!

1 Ответ

0 голосов
/ 18 ноября 2011

Если вы пытаетесь избежать написания кода регистрации и очистки каждый раз при отправке асинхронного электронного письма, ответ прост - прекратите использовать анонимные методы. Просто возьмите ваш текущий код и поместите его в обычный метод, подобный этому:

public void AsyncSendCompleted(object sender, EventArgs e) 
{
  // Use an appropriate type instead of EventArgs so you can get
  // stuff like e.Cancelled and e.Error

  // The rest of your code goes here
}

Теперь используйте этот метод в качестве обработчика события SendCompleted:

client.SendCompleted += AsyncSendCompleted;
...