1

我正在使用出色的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);

这很好用,但是在我需要发送电子邮件的地方重复相同的片段会太痛苦。

我应该如何设置它以便在异步调用完成时记录任何错误+处理消息附件?一定有更好的方法!

4

1 回答 1

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;
于 2011-11-18T03:25:24.577 回答