用于电子邮件创建和发送的ASP.Net MVC后台线程

jro*_*rob 9 email asp.net-mvc asp.net-mvc-2

我正在查看postmarkapp.com来处理使用他们提供的.net库从我的asp.net mvc 2应用程序发送电子邮件:postmark-dotnet library

在他们的文档中,他们提到发送带有附件的电子邮件可能需要一些时间,而且最好在后台工作中执行此操作.对于我的应用程序,我可以向我的用户发送10到500个个性化电子邮件,其中一些带有附件.

  • 以非阻塞方式对在ASP.Net MVC中启动创建和发送这些电子邮件的管理员用户进行后台处理的最佳方法是什么?

  • 如果他们点击"创建并发送电子邮件"给500个用户并在该过程完成之前关闭浏览器会发生什么?

谢谢你的帮助!ASP.Net MVC的新功能

Dar*_*rov 17

您可以生成一个新线程并在此线程中发送邮件:

[HttpPost]
[Authorize(Roles = "Administrator")]
public ActionResult SendMails()
{
    new Thread(() => 
    {
        // Send the emails here
    }).Start();
    return View();
}
Run Code Online (Sandbox Code Playgroud)

如果用户关闭浏览器,则该线程将继续运行,直到完成或AppDomain关闭.该操作将立即返回一个视图,它不会阻止.

此外,最好将一些标志设置到数据库中,以便发送电子邮件的操作正在运行,这样,如果管理员在按钮上单击两次,您的用户就不会受到大量邮件的攻击.

如果你想要更强大的解决方案,你可以看看MSMQ.而且这里有一个教程,应该让你快速入门.

  • 在控制器方法中发送电子邮件(开放线程)是一种不好的做法.它应该是一个静态的阶级! (2认同)