Ведение журнала ошибок при отправке электронной почты ASync с помощью MvcMailer

Я использую отличный пакет 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 ответ

Решение

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

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;
Другие вопросы по тегам