使用MvcMailer发送ASync电子邮件时记录错误

时间:2011-11-18 00:47:15

标签: asp.net-mvc-3 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 个答案:

答案 0 :(得分:0)

如果您要做的是避免每次发送异步电子邮件时都必须编写该日志记录和清理代码,答案很简单 - 停止使用匿名方法。只需获取当前代码并将其放入常规方法中,如下所示:

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;