Ведение журнала ошибок при отправке электронной почты 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;