处理邮件请求和消息的最佳方式

时间:2014-08-11 18:12:28

标签: c# asp.net-mvc email

我正在构建一个MVC应用程序,在这个应用程序中,有一些行为暗示了一些事情。因此,我们希望使用邮件系统警告我们的客户/用户。我正在建立一个本地应用程序和一个网络商店,所以我有时需要发送大量邮件。

我目前正在使用MvcMailer为什么它的工作很好,但我主要担心的是,因为它发生在正常的方法调用期间(例如:操作的结果,然后:

        MvcMailMessage msg = mailer.NewOrder(emailTo);

        msg.Send();

消息传来,需要一段时间。而且由于这种操作可能被调用了很多次,它将整体减慢整个过程,这是我不希望的。

所以我的问题是:我该如何处理邮件处理?是否有一种我可以使用的异步工具可以完成这项工作?我是否将它们存储在数据库表中并有时发送它们?我在Windows .Net中听说过Task,但我从来没有使用过,这是一个选项吗?

我正在寻找建议,请随时分享您的意见!谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用SmtpClient.SendMailAsync 关键字

async-await
public async Task SendSmtpMailAsync()
{
    SmtpClient smtpClient = new SmtpClient();
    MailMessage mailMessage = new MailMessage("FromAddress", "ToAddress", "Subject", "Body");

    await smtpClient.SendMailAsync(mailMessage);
    // Possibly do more stuff here.
}

当您在异步方法上await时,控件会返回给调用者。这意味着ASP.NET可以使用返回到ASP的线程同时处理消息 来自同一方法的.NET ThreadPool。方法完成后,它将返回到等待的行并继续执行。

请注意,单独使用此async不会将请求返回给调用者,它只会让您同时处理更多请求。你可以做的是使用这个方法与生产者 - 消费者风格集合相关联,比如BlockingCollection<T>,将你的消息添加到它并将响应返回给你的调用者。在后台,使用SendMailAsync执行这些请求。